我在Delphi中有这个源代码,当我运行代码时为什么会出现这个错误 "Floating point overflow." ?以及如何纠正它?
The error message:
The code:
procedure TForm1.Button1Click(Sender: TObject);
var n, d, i, j, maxiter , iter: Integer;
Lower,Upper : Double;
X, V : TArray<TArray<Double>>;
begin
Lower := 0;
Upper := 0.2;
n := 100;
d := 55;
SetLength(V, n, d);
SetLength(X, n, d);
maxiter := 2000;
iter := 1;
for i:= 0 n-1 do
for j:=0 to d-1 do
begin
X[i][j]:= Lower + (Upper - Lower) * Random;
V[i][j] := 0.1 * X[i][j];
end;
while (iter <= maxiter) do
begin
for i:= 0 to n-1 do
for j:= 0 to D-1 do
V[i][j]:= 5 * V[i][j] + 2.0 * Random;
iter := iter +1;
end;
end;
1 回答
看这里:
V[i][j]:= 5 * V[i][j] + 2.0 * Random;
您进行了2000次迭代,因此您的结果可能会大到7 ^ 2000~10 ^ 1690,但Double类型的最大值约为10 ^ 308 . 因此“浮点溢出”错误是准确的诊断 .
在发生错误时,您可以在调试监视或立即监视(鼠标悬停在V []上)看到V []值约为10 ^ 307 .
您可以使用10字节扩展类型(可能不适用于64位编译器)以避免这些给定变量值的溢出,但在一般情况下这不是好的解决方案 .
另请注意:您没有为此代码片段设置i索引值: