浮点 运行 总和不移动

floating-point running sum doesn't move

好的,坏的和丑陋的
为什么 round(cargof) 停留在 2

uses crt;

type 
    trail_type = (blue ,desert ,white);
    fruit_class = (none ,apple ,pineapple);
type
    ontherun = Record
    trail : trail_type;
    cargo : Integer;
    miles : Integer;
end;
Var 
    b : File of ontherun;
    rec : ontherun;
    rec_b : array[1..3] of ontherun;
    k , cargo , load , xload , miles , run : Integer;
    cargof  : Double;
    fruit : fruit_class;

begin
        cargof := 0;
        Repeat
            cargof := 0.04*cargof + 2.0;
            Writeln(round(cargof)); 
        Until cargof > 223;
writeln('hi');  
end.

如果您输出 cargof 的中间计算(舍入前),该值似乎收敛于 2.08333333333333。

我猜想的一种方式是每次添加 4%,但它是每个结果之间差异的 4%,而不是总数的复合 4%。

实际上,这与FreePascal 没有任何关系。而不是帕斯卡。而不是浮点数。而不是计算机编程。连电脑都没有。

这是纯数学。

我们有递归关系 a(0) = 0, a(n + 1) = (1/25) a(n) + 2.

与ansatz a(n) = α + β k^n 我们发现 a(n + 1) = α + β k^(n + 1) = α + β k k^n = α + k(a(n) − α) = α − k α + k a(n)因为 a(n) − α = β k^n.对于 n[ 的所有非负值,这应该等于 2 + (1/25) a(n) =66=],这意味着 k = 1/25 和 α − k α = 2 这意味着 α = 25/12。最后,a(0) = 0 产生 β = −25/12.

因此,a(n) = (25/12) (1 − 1/25^n ) 对于所有非负 n.

很容易验证这确实是一个解决方案并且 a(n) → 25/12 as n→∞;具体来说,a(n) 单调增长到这个极限。

现在,25/12 = 2.08333333333....所以四舍五入到最接近的整数值永远不会超过 2。