我用這個編譯器編譯這個代碼。對於號碼我寫18446744073709551615(2^64-1)。 Pelles的可執行文件顯示「18446744073709551615是主要」,但GCC的可執行文件顯示「18446744073709551615不是主要」。爲什麼結果不同?Pelles C和GCC用這個C素數測試給出了不同的結果
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned long long number;
printf("number: ");
scanf("%llu",&number);
unsigned long trsq=truncl(sqrtl(number));
char s=1;
for(unsigned long i=2;i<=trsq;i++) {
if (number%i==0) {
s=0;
break;
}
}
if (s==1) {
printf("%llu is prime\n",number);
} else {
printf("%llu isn't prime\n",number);
}
return 0;
}
編輯:
我測試和gcc得到12,pellesÇ給8用於sizeof(長雙)。
對於它的價值,GCC是正確的,因爲例如數量顯然不是素數 - 它至少整除5比1,確認它的確不是素數較大的一些其他號碼:HTTP:// WWW。 wolframalpha.com/input/?i=is+18446744073709551615+prime – CmdrMoozy
Pelles說:*警告#2215:從「無符號長長整型」到「長雙」的轉換;可能丟失數據*和*警告#2215:從'long double'轉換爲'unsigned long int';可能會丟失數據。*因此存在您的問題。如果你硬編碼值:*#警告2072:溢出中恆「18446744073709551615」 * – this
@CmdrMoozy沒有,我得到8 –