为什么DBL_MAX在C ++构建器中不一致?

时间:2014-02-03 10:53:39

标签: c++ c++builder

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

代码是

double x = DBL_MAX;

在静态库x中的代码中分配了不正确的值~1.444E-125。在主app中的代码中,x被赋予了正确的值~1.79E + 308。

我的第一个想法是库代码是#including正确定义值的东西,但是我在其任何源或头文件中都找不到任何这样的定义。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果我使用C ++经典编译器-则使用静态库和VCL应用程序,可以获得与DBL_MAX〜1.449E-125相同的输出。

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

将不得不问C ++编译器团队是否还记得经典编译器和DBL_MAX的问题。