我用这个编译器编译这个代码。对于号码我写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 –