c++ - 为什么 C++ 构建器中的 DBL_MAX 不一致?

标签 c++ c++builder

我使用的是 Embarcadero RAD Studio 的评估版。我为静态库中的代码和主应用程序中的代码获得了不同的 DBL_MAX 值。

代码是

双 x = DBL_MAX;

在静态库的代码中,x 被赋予了错误的值 ~1.449E-125。在主应用程序的代码中,x 被分配了正确的值 ~1.79E+308。

我的第一个想法是库代码 #including 一些错误地定义了值的东西,但我在它的任何源代码或标题中都找不到任何这样的定义。

我的另一个想法是,在 DBL_MAX 的定义中使用的 std:_max_dble 的初始化可能存在一些问题。

为了重现该问题,我仅使用此源创建了一个 C++ Builder 静态库(在 Windows 7 上):

#include "Unit1.h"
#include <float.h>
double TestDblMax()
    {
    double x(DBL_MAX);
    return x;
    }

将库链接到 VCL 表单应用程序,并从表单构造函数中调用它,作为该构造函数中的第一条语句。它给出了结果 ~1.449E-125。

最佳答案

发现此旧帖子为“未答复”。我使用 C++Builder 10.4 Sydney 做了一些测试。

如果我使用 C++ 经典编译器 - 那么我会得到与使用静态库和 VCL 应用程序为 DBL_MAX ~1.449E-125 所做的相同的输出。

当我测试使用 Win32(并关闭编译器选项“使用‘经典’Borland 编译器”)以使用基于 Clang 的编译器时,我得到 DBL_MAX ~1.79E+308 的正确结果。我还测试了基于 Clang 的编译器Win64 编译器并得到 DBL_MAX 的正确结果。

如果他们记得经典编译器和 DBL_MAX 的问题,将不得不询问 C++ 编译器团队。

关于c++ - 为什么 C++ 构建器中的 DBL_MAX 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525401/

相关文章:

c++ - 具有用户定义的指针成员的对象的赋值运算符

c++ - 如何将链接列表的开始指针作为C++中的指针传递

c++ - 使用 C++Builder 后期绑定(bind) COM 对象

delphi - TWebBrowser 和 ProcessMessages

c++ - 加载 PEM 格式证书

c++ - 在 Debug模式下构建 Qt 5.10 时 MSVC 编译器崩溃

c++ - 尝试在 C++ 中捕获二重奏

C++Builder 10.2 基于函数的优化状态 "unknown attribute ' optimize' ignored"

delphi - 如何对 Delphi/C++Builder 中的设计时包进行故障排除?

C++ 生成器或 Visual Studio