为什么以下代码在64位版本中失败(但适用于32位版本)?
var
TruncTmp: Extended;
begin
TruncTmp := 9223372036854775296;
TruncTmp := Trunc(TruncTmp); // this fails on 64-bit
Assert(TruncTmp = 9223372036854775296);
end;
$ 0000000000405D70的第一次机会异常。异常类$ C0000090,带有消息' c0000090 FLOAT_INVALID_OPERATION'。
这是一个错误还是我错过了什么?
注意:
9223372036854775296
工作正常答案 0 :(得分:12)
Win64下没有“扩展”(80位FP)类型 - 它只是“double”(64位FP)的别名。所以你只有双倍的53位分辨率。
所以我的猜测是你的情况符合预期。