LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

Тут вишенька на торте в том, что из -3.141 надо элегантно оставить -3.141, +2.718 оставить как +2.718, не трогать +0.0, и только -0.0 починить в +0.0.

Т.ч. fabs тут немного мимо кассы.

Если уж совсем по феншую, то альтернативно можно и так:

float fixNegZero(float x) {
    return x == 0.0 && signbit(x) ? -x : x;
}

PS: -0.0 == 0.0, поэтому простым сравнением negZero не отловишь.

Исходная версия beastie, :

Тут вишенька на торте в том, что из -3.141 надо элегантно оставить -3.141, +2.718 оставить как +2.718, не трогать +0.0, и только -0.0 починить в +0.0.

Т.ч. fabs тут немного мимо кассы.

Если уж совсем по феншую, то альтернативно можно и так:

float fixNegZero(float x) {
    return x == 0 && signbit(x) ? -x : x
}

PS: -0.0 == 0.0, поэтому простым сравнением negZero не отловишь.