我正在查看一些遗留代码,它试图将 long double
转换为 float
。来自阅读http://www.cplusplus.com/forum/beginner/34088/看起来 long double
的 sizeof()
为 16,而 float 的 sizeof()
为 8。
当在转换后引用 float 变量时,您会得到一个浮点溢出异常
,这是意料之中的......
在 Debug模式下运行时,IDE 每次都会向您显示异常,除非您忽略所有该类型。我不想这样做,因为我希望妥善解决问题。
所以这将问题归结为:
有没有一种方法可以在不溢出的情况下进行这样的转换(或者转换的替代方法可以获得相同的信息)?
当前转换看起来像:floatVar = (float) longDoubleVar;
最佳答案
将 long double
类型的值转换为 float
类型的值是定义明确且有意义的。如果结果太大而无法存储在 float
中,则结果为浮点异常,默认情况下无效;存储的值为+inf
或-inf
。
浮点异常不是 C++ 异常;它特定于 float ,并且在您的代码运行时不会被看到,除非您特意安装了一个浮点陷阱处理程序。也许您的 IDE 安装了陷阱处理程序;如果是这样,您将不得不查阅文档以了解如何禁用此“功能”。
关于C++ Builder 2009 Float 与 Long Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19319445/