C++ 如何克服运行时错误信号:25?等效地,浮点错误:内核转储?

C++ 如何克服运行时错误信号:25?等效地,浮点错误:内核转储?,c++,runtime,primes,floating-point-exceptions,C++,Runtime,Primes,Floating Point Exceptions,所以我做了这个函数来打印间隔L,U之间的大素数: 1.对于较小的数字,此函数可以正确运行。 2.当我尝试打印两个大数字之间的素数时,例如100000000和100100000, 在IDEONE.com上,它说:运行时错误信号:25 在linuxusing终端上,它显示:浮点异常核心转储 在从小数字到大数字的转换过程中,可能出现了什么错误 //primes[] stores all the primes between 2 and sqrt(1000000000) void check(

所以我做了这个函数来打印间隔L,U之间的大素数: 1.对于较小的数字,此函数可以正确运行。 2.当我尝试打印两个大数字之间的素数时,例如100000000和100100000, 在IDEONE.com上,它说:运行时错误信号:25 在linuxusing终端上,它显示:浮点异常核心转储

在从小数字到大数字的转换过程中,可能出现了什么错误

//primes[] stores all the primes between 2 and sqrt(1000000000)

    void check(long long L,long long U,long long primes[])
    {
        long long g=0,i=0,d;
        if(L==1)
        L++;
        long long v=sqrt(1000000000);
        for(long long k=L;k<U+1;k++)
        {
            i=0;
            d=sqrt(k);
            while(i<=v)     //this statement...
            {
                if(primes[i]<=d)
                {
                    if(k%primes[i]==0)
                    {g=1;break;}
                    ++i;
                }
                else
                break;
            }

            if(g==0)
            {
                cout<<k<<endl;
            }
            g=0;
        }
        return;
    }
编辑:我通过从计算中删除素数[]检查注释中未使用的间隔,解决了这个问题。这可能使标记的while语句中的计算数量减少了10倍。感谢所有响应者。

检查签名

double sqrt(double x)

它可以接受的最大值是多少。

您有一个调试器。请尝试使用它。和/或ValGRIDE调试器,我使用默认的奥威尔DEV C++调试器在Windows上显示什么。i、 当我运行调试器时,它会打开原始程序,从间隔中输出一些值,然后关闭。在这种情况下,调试器永远不会打开。奇怪的但是,当我在任何其他程序上使用它时,它会打开。你要传递给素数[]的函数的值是多少?我创建了一个大小为SQRT100000000的素数数组,并从一开始就开始填充素数。第一个元素是2,第二个元素是3,第三个元素是5,依此类推。素数从2开始到31607。空间的其余部分未使用。素数是有效的,并且在这个范围内是穷举的。我认为平方根函数没有任何问题。我已经打印出SQRT100000000,它给出了正确的答案。我使用此函数的所有数字都小于上一个数字。