−0
−0(マイナスゼロ)、あるいは負のゼロとは、数値のゼロにマイナスの符号をつけたものである。
通常の算術では、負のゼロは単なるゼロ(及び正のゼロ、+0)と同じであるが、これらを分ける方が望ましい場合や、分けて扱わざるを得ない場合がある。
そのようなケースとして、以下のものがある
- 極限。例えば右方極限 x →+0と左方極限 x → −0 を分けて考えるケースや、1/∞、1/(−∞)をそれぞれ+0、−0と見なすケース → 片側極限の記事を参照。
- 統計力学における負温度 → 負温度の記事を参照。
- コンピュータの数値表現においてゼロの表現に複数あるケース。
- セルシウス温度による気温などのように、ゼロ以上かゼロ未満かであることに重要さがあるため、「0 より小さいが −1 まで丸めるには絶対値が小さすぎる量」の意味で負のゼロを用いるケース。
この記事では 3. と 4. を扱う。
正のゼロ[編集]
−0 が、無限大でない正の数を −∞ で割った場合などの結果という特別な値であるのと同様に、+0 についても、通常の 0 とは違う特別な値としてのみそういう値が現れるということにしたほうが良い場合もある(良く知られた±の符号付きの無限大と、射影拡張実数における「符号の付かない無限大」の存在に少し似ている)。しかしこの記事ではもっぱら、IEEE 754 でも採用している、0 と −0 のみがある系を扱う。
コンピュータの数値表現と負のゼロ[編集]
IEEE 754における負のゼロ[編集]
現在のほぼ全てのコンピュータやプログラミング言語が採用している浮動小数点数の標準である IEEE 754 には通常の 0.0 と −0.0 がある。
詳細はIEEE 754における負のゼロの項目を参照。
その他のコンピュータの数値表現における負のゼロ[編集]
コンピュータの数値表現では、補数を利用して負数を表現することが多いが、同じ補数でも基数の補数を利用した場合には負のゼロが生じないのに対し、減基数の補数を用いた場合には負のゼロが生じる。また「符号と絶対値」方式の場合にもゼロについて正と負の2つのゼロがある(前述のIEEE 754など)。
統計等における負のゼロ[編集]
気象学では、−0度は 0度(セルシウス温度)より低いが −1度とするほどではない温度を示し、統計的な意味(つまり1度単位で統計を取る場合)では重要なこともある。例えば、−0.2度がその例である。0度は負の範囲を含まないのでこれを 0度として統計処理することはできない。しかし、冬季の寒さを比較する際に日中の気温が 0度未満(氷点下)の日を数えることは基本であり、無視することができない。従って −1度に丸めるには絶対値が小さすぎる温度は −0度 と記録される。道路上などに設置してある気温・路温計でもそれを見ることが出来る。
数値表現としての負のゼロ[編集]
コンピュータにおける負の値の扱い方にはいろいろあるが、IEEE 754 が採用しているような「符号と絶対値」方式による表現では、ゼロについて、
- +0
- −0
の二種類の表現が可能であるため、問題が生じることがある。なお21世紀にはほとんど見られなくなったがかつては、整数の表現についても「符号と絶対値」方式が採用されることもあった。
例えば、IEEE 754 では、x==y
といったような通常の比較において、通常のゼロと負のゼロを比較した場合、真になることを要求している。単にワードを整数と同様に比較しただけでは、その要求を満たすことができない。もっとも、IEEE 754 ではたとえば NaN についても同様に例外的な扱いが必要なので ( NaN==NaN
は常に偽で NaN!=NaN
は常に真) 、実装上、負のゼロがきわめて特異というわけでもない(IEEE 754 では)。
脚注[編集]
参考文献[編集]
- “Floating point types”. MSDN C# Language Specification. 2005年10月15日閲覧。
- “Division operator”. MSDN C# Language Specification. 2005年10月15日閲覧。
- Thomas Wang (2000年3月). Java Floating-Point Number Intricacies. 2000年9月 .
- Kittel, Charles; and Herbert Kroemer (1980年). Thermal Physics. W. H. Freeman & Company. ISBN 0716710889
- Mike Colishaw (2008年7月28日). “Decimal Arithmetic Specification, version 1.68”. 2008年8月14日閲覧。 — 負のゼロを含む十進浮動小数点数の仕様。
- Michael Ingrassia. “Fortran 95 SIGN Change”. Sun Developer Network. 2005年10月15日閲覧。 — FORTRAN の
SIGN
関数が、負のゼロを扱えるよう Fortran 95 で変更された。 - “JScript data types”. MSDN JScript. 2005年10月16日閲覧。 — JScript の浮動小数点型は定義として負のゼロを持つ。
- “A look at the floating-point support of the Java virtual machine”. Javaworld. 2005年10月16日閲覧。 — Java仮想マシンにおける負のゼロの表現
- Bruce Dawson. “Comparing floating point numbers”. 2008年3月6日閲覧。 — 浮動小数点数を比較する際に負のゼロをどう扱うか
- John Walker. “Minus Zero”. UNIVAC Memories. 2005年10月17日閲覧。 — UNIVAC® 1100 ファミリにおける1の補数表現