这段代码完美地运行到100000,但是如果你输入1000000,它就会开始给出错误C++ 0xC0000094: Integer division by zero
。我确信这是浮点数。我尝试了(/ fp:precise),(/ fp:strict),(/ fp:except)和(/ fp:except-)的所有组合,但没有得到肯定的结果。
#include "stdafx.h"
#include "time.h"
#include "math.h"
#include "iostream"
#define unlikely(x)(x)
int main()
{
using namespace std;
begin:
int k;
cout<<"Please enter the nth prime you want: ";
cin>>k;
int cloc=clock();
int*p;p=new int [k];
int i,j,v,n=0;
for(p[0]=2,i=3;n<k-1;i+=2)
for(j=1;unlikely((v=p[j],pow(v,2)>i))?!(p[++n]=i):(i%v);++j);
cout <<"The "<<k<<"th prime is "<<p[n]<<"\nIt took me "<<clock()-cloc<<" milliseconds to find your prime.\n";
goto begin;
}
答案 0 :(得分:1)
问题中显示的代码不会初始化p[1]
或为其指定值。在设置for
的{{1}}循环中,j=1
用于p[j]
的分配。结果为v
的未知值。显然,它恰好为零,这导致表达式v
中的除以零。
由于此代码未记录,结构不合理且不可读,因此正确的解决方案是丢弃它并从头开始。
浮点与问题没有关系,尽管使用i%v
计算 v 2 是一个不好的选择; pow(v, 2)
会更好。但是,当整数除以零时,某些系统会打印误导性消息“浮动异常”。尽管有消息,但这是整数操作中的错误。