В C, когда поддерживается ±0.0
, -0.0
или +0.0
, назначенный double
, обычно не делает арифметической разницы. Хотя они имеют разные битовые шаблоны, они арифметически сравниваются как равные.
double zp = +0.0;
double zn = -0.0;
printf("0 == memcmp %d\n", 0 == memcmp(&zn, &zp, sizeof zp));// --> 0 == memcmp 0
printf("== %d\n", zn == zp); // --> == 1
Вдохновляем комментарий @Pascal Cuoq, я ищу еще несколько функций в стандарте C, которые предоставляют арифметически разные результаты.
Примечание. Многие функции, такие как sin()
, возвращают +0.0
из f(+0.0)
и -0.0
из f(-0.0)
. Но они не дают различных арифметических результатов. Также 2 результата не должны быть NaN
.