Nextafter vs nexttoward функции в С++ 2011?

В чем разница между nextafter и nexttoward функциями стандартной библиотеки С++ 2011?

Ответы

Ответ 1

Поскольку функции исходят из C, они не могут быть перегружены, что означает два разных имени для функций, которые делают то же самое, но имеют разные параметры (-type). Вот оригинальные подписи:

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

И теперь стандарт просто говорит, что должно быть несколько перегрузок, чтобы сделать все лучше на С++ (§26.8 [c.math] p11):

Кроме того, должны быть дополнительные перегрузки, достаточные для обеспечения:

  • Если какой-либо аргумент, соответствующий параметру double, имеет тип long double,, тогда все аргументы, соответствующие параметрам double, эффективно отображаются в long double.
  • В противном случае, если любой аргумент, соответствующий параметру double, имеет тип double или целочисленный тип, тогда все аргументы, соответствующие параметрам double, эффективно передаются в double.
  • В противном случае все аргументы, соответствующие параметрам double, эффективно передаются в float.

См. также: ISO C 7.5, 7.10.2, 7.10.6.

Ответ 2

Прочтите страницу руководства:

Функции nexttoward() выполняют то же самое, что и функции nextafter(), за исключением того, что они имеют длинный двойной второй аргумент.