delphi - 对于 64 位构建,Trunc() 对于高 Int64 失败

标签 delphi 64-bit

为什么以下代码对于 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/

相关文章:

arrays - TArray<T>.Create() 是否记录在某处?

delphi - 程序集和 64 位整数 - 从 pascal(delphi 6) 创建?

windows - VLC 2.1.5 (win64) 不支持 TLS?

java - Windows 7 中的内部路径映射

64-bit - 无法在 Ubuntu 12.04.3 64 位上启动 JD-GUI

delphi - 如何在没有冗余列表的情况下迭代父/子层次结构中的对象?

delphi - 无效的类型转换

delphi - 使用 FireDac 聚合

.net - 何时在 Visual Studio 中面向 x64

c# - 如何使用 visual studio 2010 启动 64 位编程?