История изменений
Исправление 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 не отловишь.