Я хочу сериализовать число с плавающей запятой таким образом, чтобы информация знака не терялась. В частности, я бы хотел отличить отрицательный ноль IEEE-754 от обычного ноля.
Спецификация языка говорит
Результат деления с плавающей запятой на ноль не указан вне стандарта IEEE-754; возникновение паники во время выполнения зависит от реализации.
, что говорит о том, что я не могу сделать
n == 0 && (float64(1) / n) < 0
и я попытался math.Copysign
и math.Signbit
, что говорит
func Signbit(x float64) bool
Signbit
возвращает true
, если x отрицательный или отрицательный ноль.
но
n == 0 && math.Signbit(n)
не похоже на
n := -float64(0)
Есть идеи?
EDIT:
Я подал выпуск 2196 , чтобы отследить то, что, по моему мнению, является запутанным отличием
nz := -float64(0)
и
pz := float64(0)
nz := -pz
как предложено peterSO.