在两个不同的 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
这是我的代码
#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