首页 > 解决方案 > 有一个无效的浮点运算,但在哪里?

问题描述

我目前正在编写一个代码,它需要一个给定的数字打印所有符合 4n+1 格式的素数。这是我到目前为止所拥有的。他们的问题是,这给了我一个运行时错误 207,我认为这意味着无效的浮点运算,但我看不出它是如何最终执行无效的浮点运算的。唯一的代码应该是处理“if num-(iter*iter)> then”行中的负数。

program TwoSquares;

var
    num, numSqrt, iter, bigSqr,smallSqr: integer;
    


begin
    num:=29;
    
    while num>4 do
    begin
        numSqrt:=trunc(sqrt(num));
        for iter:=2 to numSqrt do
        begin
            if num mod iter = 0 then
                num:=num - 1;
                continue;
        end;
        
        if (num-1) mod 4 = 0 then
        begin
            iter:=(num-1) div 4;
            while iter>0 do
            begin
                if num-(iter*iter)>0 then
                    bigSqr:=iter;
                    break;
                iter:=iter-1;
            end;
            smallSqr:=trunc(sqrt(num-(iter*iter)));
            writeln(num,' ', smallSqr,' ',bigSqr);
            num:=num - 1;
        end;
    end;
end.

标签: pascalfreepascal

解决方案


您的支票不是直接在使用它的地方之前。思考; 是休息;num-(iter*iter) if-then 之后的语句检查 while 循环可以终止的唯一方法?

尝试单步执行您的程序,这也可以验证块结构是否按您的想法工作。它似乎不太一致,在某些地方使用 begin..end,在其他地方使用缩进。


推荐阅读