−0
−0(マイナスゼロ)、あるいは負のゼロとは、数値のゼロにマイナスの符号をつけたものである。
通常の算術では、負のゼロは単なるゼロ(及び正のゼロ、+0)と同じであるが、これらを分ける方が望ましい場合や、分けて扱わざるを得ない場合がある。
そのようなケースとして、以下のものがある
- 極限。例えば右方極限を x → +0 と左方極限を x → −0 と書いて区別する場合 →詳細は「片側極限」を参照
- コンピュータの数値表現においてゼロの表現が一意でない場合
数学
[編集]+0, −0, +∞, −∞ は通常、極限操作を表す記号として用いられ、実数上の元とは扱われない。これは任意の実数 c に対する +c, −c についても同様である。
しかし、煩雑さを避けるため、標語的に正負のゼロや無限大を実数であるかのように表記することがしばしば行われる。
コンピュータの数値表現と負のゼロ
[編集]IEEE 754における負のゼロ
[編集]現在のほぼ全てのコンピュータやプログラミング言語が採用している浮動小数点数の標準である IEEE 754 には通常の 0.0 と −0.0 がある。
その他のコンピュータの数値表現における負のゼロ
[編集]コンピュータの数値表現では、補数を利用して負数を表現することが多いが、同じ補数でも基数の補数を利用した場合には負のゼロが生じないのに対し、減基数の補数を用いた場合には負のゼロが生じる。また「符号と絶対値」方式の場合にもゼロについて正と負の2つのゼロがある(前述のIEEE 754など)。
統計等における負のゼロ
[編集]気象学では、−0 °Cは 0 °C(セルシウス温度)より低いが −1 °Cとするほどではない温度を示し、統計的な意味(つまり1 °C単位で統計を取る場合)では重要なこともある。例えば、−0.2 °Cがその例である。0 °Cは負の範囲を含まないのでこれを 0 °Cとして統計処理することはできない。また、冬季の寒さを比較する際に日中の気温が 0 °C未満(氷点下)の日を数えることは基本であり、無視することができない。従って −1 °Cに丸めるには絶対値が小さすぎる温度は −0 °C と記録される。道路上などに設置してある気温・路温計でもそれを見ることが出来る。
数値表現としての負のゼロ
[編集]コンピュータにおける負の値の扱い方にはいろいろあるが、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 (28 July 2008). “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の補数表現