2017-06-09 76 views
0

這裏是我的代碼獲得了POW()函數的兩個不同的結果,在兩個不同的Linux操作系統

#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操作系統的代碼。 (GCC powfn.c -o powfn)

在VirtualBox的Ubuntu中,我得到了以下結果

pow as double: 4294967296.000000 
pow as long int: 4294967296 

在Debian GNU/Linux的8 OS上的Znyq的ARM Cortex A9處理器上運行,我得到了以下結果

pow as double: 4294967296.000000 
pow as long int: 2147483647 

這是怎麼回事?爲什麼這兩個不同的結果?

+1

嘗試檢查'long int類型的大小'在兩臺機器上。 – taras

+1

看起來你在ARM上的long int實際上是一個32位整數。 – steppo

+0

是的。 ARM上的long int是4字節,而在VirtualBox Ubuntu上是8字節 – KharoBangdo

回答

1

對於相同的數據類型,這兩個處理器極有可能具有不同的大小。您可以通過編譯和運行在兩臺機器上的代碼進行測試:

#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 
+0

下面是使用Cortex-A9在Wandboard上編譯的結果:[Pastebin:GCC Wandboard Cortex-A9](https://pastebin.com/up7jwC5d)。 – jww

相關問題