このコンパイラでこのコードをコンパイルします。番号については、18446744073709551615 (2^64-1) と書きます。Pelles の実行可能ファイルは「18446744073709551615 は素数です」と言っていますが、GCC の実行可能ファイルは「18446744073709551615 は素数ではありません」と言っています。なぜ結果が異なるのですか?
#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 c は sizeof(long double) に対して 8 を返しました。