c/c++语言开发共享DBL_MAX的类型

我在某处看到了这段代码

printf("DBL_MAX : %gn", (double) DBL_MAX); 

演员是必要的吗? 我在标准中找不到任何指定DBL_MAX必须实际拥有(或提升)类型为double

    DBL_MAX被指定为宏,因此本身没有类型。

    1999 C标准的要求是DBL_MAX必须扩展到一个至少为1E+37的恒定值,但没有说明它的实际类型。 由于它表示double可以表示的实现定义的最大值,因此逻辑会建议扩展是一个可以转换为double而无需任何更改(例如精度损失)的值。

    此逻辑允许但不要求DBL_MAXdouble类型。 它也可以是long double类型(因为它还需要long double可以精确地表示long double可以的所有值)。

    实际上,很难设想一个DBL_MAX扩展为不是double类型的常量的实现,而且我当然从未听说过一个。 但这并不意味着它是必需的。 printf("DBL_MAX : %gn", (double) DBL_MAX)提供了一个保守的(在为允许的可能性提供的意义上,即使它可能不会发生)也保证传递double类型的值printf()

    我不相信标准中有任何东西真的说DBL_MAXdouble类型的表达式。

    N1570 5.2.4.2.2p12中的描述是: FLT_MAXDBL_MAXLDBL_MAX ,它是:

    以下列表中给出的值应替换为实现定义值大于或等于所示值的常量表达式:

    (所有三个必须至少1E+37 )。

    就常识问题而言,我认为FLT_MAXDBL_MAXLDBL_MAX宏扩展的表达式分别不是 floatdoublelong double类型的理由。 我怀疑标准的作者只是假设它们是预期的类型。 我个人很乐意省略演员并使用DBL_MAX而不是(double)DBL_MAX

    如果使用的实现:

     #define DBL_MAX 1.79769313486231570815e+308L 

    给它一种long double ,它会违反直觉,但我认为标准中没有要求它会违反。

      以上就是c/c++开发分享DBL_MAX的类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544610.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐