【问题标题】:nextafter vs nexttoward functions in C++ 2011?C++ 2011 中的 nextafter 与 nexttoward 函数?
【发布时间】:2012-08-17 07:51:35
【问题描述】:

C++ 2011标准库的nextafter和nexttoward函数有什么区别?

【问题讨论】:

    标签: c++ floating-point c++11 c++-standard-library


    【解决方案1】:

    由于函数源自 C,它们不能被重载,这意味着函数有两个不同的名称,但具有不同的参数(-type)。以下是原始签名:

    float nextafter(float, float);
    float nexttoward(float, long double);
    

    现在标准只是说应该有 a few overloads 以使 C++ 中的事情变得更好 (§26.8 [c.math] p11):

    此外,应有足够的额外重载以确保:

    1. 如果与double 参数对应的任何参数的类型为long double,,则与double 参数对应的所有参数都将有效地转换为long double。
    2. 否则,如果与double 参数对应的任何参数的类型为double 或整数类型,则与double 参数对应的所有参数都将有效地转换为double。
    3. 否则,与double 参数对应的所有参数都将有效地转换为float。

    另请参阅:ISO C 7.5、7.10.2、7.10.6。

    【讨论】:

      【解决方案2】:

      阅读手册页:

      nexttoward() 函数的作用与 nextafter() 函数相同,只是它们有一个长的双秒参数。

      【讨论】:

      • 我想你忘了引用关于如何使用第二个参数的部分。
      • 不讨论其含义,这不是很有帮助。是否存在行为可能不同的极端情况?在内部转换为 long double 是否存在性能开销?
      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多