В чем разница между nextafter и nexttoward функциями стандартной библиотеки С++ 2011?
Nextafter vs 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(), за исключением того, что они имеют длинный двойной второй аргумент.