我在 C++ Builder 10.1 Berlin 中遇到了某些 double 到 unsigned __int64 类型转换的问题,抛出浮点无效操作异常($C0000090)。
我的应用程序允许用户输入,因此我需要能够处理任何值,但为简单起见,让我们使用以下示例:
double dValue = 9223372036854775807.0;
unsigned __int64 uhValue = (unsigned __int64) dValue;
虽然我可以在 try/catch 中处理此异常,但这似乎破坏了 FPU 寄存器堆栈,并且后续浮点操作将生成浮点堆栈检查异常。
以下问题报告描述了一个类似的问题并有一个潜在的解决方法: http://qc.embarcadero.com/wc/qcmain.aspx/qcmain.aspx?d= 119745
如果可能的话,我想防止初始浮点异常。抛开精度损失不谈,存储在 double 中的值在有效的无符号 __int64 范围内,所以我无法理解导致异常的原因。
在类型转换/转换或异常处理方面,我可以做些什么不同的事情吗?
附带说明一下,上面的代码片段在 Visual Studio 中运行良好,并将 uhValue 设置为 9223372036854775808。
谢谢!