在两个不同的 Linux OS 上获得 pow() 函数的两个不同结果

Getting two different result for pow() function on two different Linux OS

这是我的代码

#include<stdio.h>
#include<math.h>

void main(void)
{
    printf("pow as double: %lf\n\r", pow(2,32));
    printf("pow as long int: %ld\n\r", ((long int)pow(2,32)));
}

我在 2 个不同的 Linux OS 上编译了代码。 (gcc powfn.c -o powfn)

在 VirtualBox Ubuntu 上,我得到了以下结果

pow as double: 4294967296.000000  
pow as long int: 4294967296

在 Znyq ARM Cortex A9 处理器上的 Debian GNU/Linux 8 OS 运行 上,我得到以下结果

pow as double: 4294967296.000000
pow as long int: 2147483647  

这是怎么回事?为什么两个不同的结果?

这两个处理器很可能对相同的数据类型具有不同的大小。您可以通过在两台机器上编译和 运行 这段代码来测试它:

#include <stdio.h>
int main()
{
    int integerType;
    long int longIntType;
    float floatType;
    double doubleType;
    char charType;

    // Sizeof operator is used to evaluate the size of a variable
    printf("Size of int: %ld bytes\n",sizeof(integerType));
    printf("Size of long int: %ld bytes\n",sizeof(longIntType));
    printf("Size of float: %ld bytes\n",sizeof(floatType));
    printf("Size of double: %ld bytes\n",sizeof(doubleType));
    printf("Size of char: %ld byte\n",sizeof(charType));

    return 0;
}

这是 运行 程序在 Wandboard with Cortex-A9 和 Ubuntu 15.10 上的结果:

wandboard:~$ ./test.exe
Size of int: 4 bytes
Size of long int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of char: 1 byte