gpt4 book ai didi

Delphi错误的 double 计算

转载 作者:行者123 更新时间:2023-12-03 18:55:32 27 4
gpt4 key购买 nike

我在使用 double 变量计算简单算术方程时遇到问题。

我有一个具有 double 属性 Value 的组件,我将此属性设置为 100。

然后我做一个简单的减法来检查这个值是否真的是 100:

var
check: double;
begin
check:= 100 - MyComponent.Value
showmessage(floattostr(check));
end;

问题是我没有得到零,我得到 -1.4210854715202E-14,这是一个问题,因为我的程序检查这个结果是否正好为零

知道如何解决吗?

最佳答案

尽管您另有声明,MyComponent.Value 返回的值显然不完全等于 100 .如果是,那么 100 - MyComponent.Value将完全等于 0 .我们可以说是因为 100完全可以用二进制浮点表示。

很容易看到 100.0 - 100.0 = 0.0 .

var
x, y: Double;
....
x := 100.0;
y := 100.0;
Assert(x-y=0.0);

你会发现,在你的场景中,
MyComponent.Value = 100.0

计算为 False .

一般来说,尝试精确比较浮点值总是一件危险的事情。特别是如果这些值是算术运算的结果,那么浮点运算固有的不精确性将意味着精确比较通常不会给出您期望的结果。

我假设 MyComponent.Value实际上执行算术而不是像您声称的那样返回 100.0 .

有时检查浮点值是否相等的最佳方法是检查近似相等。例如, abs(x-y)<tol在哪里 tol是一个很小的数字。这样做的困难在于很难想出一个可靠的选择 tol。 .

在不了解更多细节的情况下,很难说你应该如何实现这个测试。

关于Delphi错误的 double 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com