-0.0을 0.0으로 어떻게 바꿀까?
Intro
-0.0을 출력하면 보이는 음의 부호를 지우고 싶다.
컴퓨터의 일반적인 실수 표현은 -0.0과 0.0을 구분한다. 딱히 구분할 이유는 생각 나지 않는다 — 아시는 분께서는 댓글 부탁 드려요!
Abs
언어별로 절댓값을 구하는 함수를 제공한다. 하지만 0.0 이외의 음수를 보존하려면 또는 후술할 min, max와 같은 경우에는 절댓값을 적용할 수 없다.
Min, Max
C++, Java, Javascript에서 max(-0.0, 0.0)
과 max(0.0, -0.0)
은 모두 0.0을 보장한다. 반대로 내장 min 함수는 모두 -0.0을 보장한다.
이와 달리 Python에서는 네 경우 모두에서 두 매개변수 중 전자를 반환한다. 다른 언어에서도 내장 함수를 사용하지 않고 직접 구현하면 같은 결과를 얻는다. 왜냐하면 -0.0과 0.0의 동등 비교가 참이라 대소를 비교하면 거짓이기 때문이다. 물론 실수의 동등 비교는 위험하지만, 대소 비교가 양방향 모두 거짓인 것은 사실이다.
결론적으로 max(0.0, x)
는 앞서 언급한 모든 언어에서 내장 함수를 사용하든 직접 구현하든지 x가 -0.0일 때 0.0으로의 변환을 보장한다. x가 음수여도 0.0, 양수이면 변하지 않으므로 항상 음의 부호가 없음이 보장된다.
반대로 min(-0.0, x)
는 x가 0.0일 때 -0.0을 보장한다. x가 양수여도 -0.0, 음수이면 변하지 않으므로 항상 음의 부호가 있음이 보장된다.
내장 함수가 어떻게 구현했길래 0.0 > -0.0을 보장할 수 있었던 것인지는 추가 조사가 필요하다 — 아시는 분께서는 댓글 부탁 드립니다!
Add
0.0을 더하면 된다.
Citation
@online{kee2024,
author = {Kee, Yunho},
title = {-0.0을 0.0으로 어떻게 바꿀까?},
date = {2024-05-12},
url = {https://yhkee0404.github.io/posts/algorithms/negative-zero/},
langid = {ko}
}