gpt4 book ai didi

delphi - Delphi计算出的值有误

转载 作者:行者123 更新时间:2023-12-03 18:26:48 24 4
gpt4 key购买 nike

我有一条声明为

T3DVector = record
X,Y,Z: Integer;
end;


T3DVector类型的一个变量V保持:

V.X= -25052
V.Y= 34165
V.Z= 37730


然后,我尝试以下一行。 D被声明为Double。

D:= (V.X*V.X) + (V.Y*V.Y) + (V.Z*V.Z);


返回值为:-1076564467(0xFFFFFFFFBFD4EE0D)

以下代码应等效:

D:= (V.X*V.X);
D:= D + (V.Y*V.Y);
D:= D + (V.Z*V.Z);


但是,这将返回3218402829(0x00000000BFD4EE0D),它实际上是正确的值。

通过查看高位,我认为这是一个溢出问题。当我打开溢出检查时,第一行停止,但出现“整数溢出”异常。这让我更加困惑,因为D是Double,而我仅将值存储到D中

任何人都可以澄清一下吗?

最佳答案

赋值语句的目标与右侧的评估方式无关。在右侧,您所拥有的都是Integer类型,因此表达式将被评估为该类型。

如果要将右侧的值评估为其他类型,则至少一个操作数必须具有该类型。当您将语句分成多个步骤并将D合并到表达式的右侧时,您亲眼目睹了这一点。 V.Y * V.Y的值仍被评估为Integer类型,但是结果被提升为Double类型,以使其与加法项(D)中另一个操作数的类型匹配。

关于delphi - Delphi计算出的值有误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28035254/

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