概要
親愛なるルームメイト「マイナスゼロってあるんですか?」
緑さん「ええ? 無いだろ? ゼロは負の数でも正の数でも無いでしょ」
Python さん「あるで」
キタキタ。プログラミングで遊んでて、こういうのが一番楽しいんだから。1日1 Python のお時間です。
float
型のゼロにはマイナスがある
ほうら。 float
の 0.0
にマイナスをくっつけることができるぜ。
python -V
# Python 3.10.12
python -c 'print(0.0 * -1)'
# -0.0
python -c 'print(0 / -1)'
# -0.0
-0.0
は 0.0
と等価だけど、同一ではないぜ。
python -c 'print(-0.0 == 0.0)'
# True
python -c 'print(-0.0 is 0.0)'
# SyntaxWarning: "is" with a literal. Did you mean "=="?
# False
is
は普通 bool
とか None
について使うものだから、 Python ちゃんは warning をくれているな。でも今回の場合 ==
と is
では結果が違うのだから、使い分ける意義はあるじゃねーか Python ちゃんよォ〜〜?
逆に、 -0.0
を 0.0
にしたいときは、 0.0
を足したり -0.0
を掛けたりすればいいぜ。これは普通の整数と同じだね。
python -c 'print(-0.0 + 0.0)'
0.0
python -c 'print(-0.0 * -0.0)'
0.0
なんで?
float
、つまり浮動小数点数は、以下の構造から出来ている。
- 符号 (正か負か)
- 仮数部
- 指数部
-12.34 = -, 1.234, 10**1 = 符号, 仮数部, 10**指数部
だから、符号にマイナスが来るような計算をすると、マイナスがきっちり残るということらしいぜ。ふーん。こういうのが一番楽しいんだよな……。