为什么以下代码对于 64 位构建会失败(但适用于 32 位构建)?
var
TruncTmp: Extended;
begin
TruncTmp := 9223372036854775296;
TruncTmp := Trunc(TruncTmp); // this fails on 64-bit
Assert(TruncTmp = 9223372036854775296);
end;
First chance exception at $0000000000405D70. Exception class $C0000090 with message 'c0000090 FLOAT_INVALID_OPERATION'.
这是一个错误还是我遗漏了什么?
注释:
- 我使用的是 Delphi 10.2
- 数字 <
9223372036854775296
工作正常
最佳答案
Win64 下没有“扩展”(80 位 FP)类型 - 它只是“double”(64 位 FP)的别名。所以 double 只有 53 位分辨率。
所以我的猜测是您的情况符合预期。
关于delphi - 对于 64 位构建,Trunc() 对于高 Int64 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301595/