nextafter vs C ++ 2011中的nexttoward函数?

时间:2012-08-21 22:12:38

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

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

2 个答案:

答案 0 :(得分:15)

由于函数源自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.   
  3. 否则,如果对应于double参数的任何参数具有类型double或整数类型,则与double参数对应的所有参数都将有效地转换为double
  4.   
  5. 否则,与double参数对应的所有参数都会有效地转换为float
  6.         

    参见:ISO C 7.5,7.10.2,7.10.6。

答案 1 :(得分:2)

阅读手册页:

  

nexttoward()函数与nextafter()函数的作用相同,只是它们有一个long double second参数。