C++ Builder 2009 Float 与 Long Double

标签 c++ casting c++builder long-double

我正在查看一些遗留代码,它试图将 long double 转换为 float。来自阅读http://www.cplusplus.com/forum/beginner/34088/看起来 long doublesizeof() 为 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/

相关文章:

java - 将对象转换为 Integer,string ,

delphi - 将自定义 CodeInsight 管理器注册到 C++Builder,无需初始化/终止部分

c++ - 为什么 C++Builder 无法创建预编译头文件?

c++ - 如何使用已存在的程序实例自定义右键单击?

c++ - 对指针的误解

c++ - 为具有特定成员变量值的类创建不同类型

c++ - 关于现有代码段的样式问题 (C/C++)

c++ - 如何扩展词法转换以支持枚举类型?

java - 子类的对象不能调用自己的方法

c++ - Core Foundation 为每次调用 CFSTR() 创建内存泄漏