2011-10-30 8 views
19

負のゼロの浮動小数点値を使用しますか?

次のC++コードを考えてみましょう:

double someZero = 0; 
std::cout << 0 - someZero << '\n'; // prints 0 
std::cout << -someZero << std::endl; // prints -0 

何が負のゼロになりますか、それを防御すべきですか(つまり、マイナスを変数に打つのではなく減算を使用しますか?

+0

http://en.wikipedia.org/wiki/Signed_zero –

答えて

0
20

複雑で計算するときにIEEE 754で署名されたゼロの包含は、特に、いくつかの重大な問題[1]での数値精度を達成することがはるかに容易にすることが主張されています基本機能[2]。

第一の基準は、ダウンロードhereのために利用可能であるW.カハンによって、「何も符号ビットについて複雑な初等関数や多くの騒ぎのための分枝切断」です。

この論文の例は、1/(+0)1/(-0)です。ここで、ゼロの符号は、最初の式が+infに等しく、2番目の式が-infになるため、大きな違いがあります。

+2

+1はカハンの精神的な論文へのリンクです。 – njuffa

+0

私はHanxWriterで書かれた書類が大好きです。 ;-) – Phil

+0

これは、符号付きゼロがプログラミング言語で使用するものについては説明していませんが、 –

0

私が見ることができる2つだけ本当のユースケースがあります。

  1. あなたは値がfloatとして表現するには陰性であるが(おそらくinfinitessimal)非常に、非常に小さい、すなわち小さすぎるか、ということを示したいですダブル。
  2. ネガを許可しても、ゼロを表示したい数学で作業しています。物理学にはいくつかのケースがあり、複素数と数論が有益な場合があります。

ほとんどの場合、それは役に立たず、避けるべきです。

浮動小数点用のIs there a negative zero?IEEE 754 specもご覧ください。ゼログッドを締結また

3

:ゼロを拡大実数ように1/-0のバリアント=-∞と1/+ 0 = +∞、分割によって見なすことができる

ゼロは±0 /±0に対してのみ定義されます。

負符号付きゼロは、x→0-、x→0-、またはx→↑0と表示される片側制限として下から0に近づくという数学的解析の概念をエコーし​​ます。表記「-0」は、ゼロに丸められた小さな負の数を示すために非公式に使用することができる。負のゼロの概念は、統計力学や他の分野でも理論的な応用があります。

+2

正、負、符号なし、2つの負数の減算、または2つの反対符号と等しい大きさの加算を使用して、符号なしのゼロを生成することは役に立ちましたか?符号付きゼロで除算すると無限大になりますが、符号なしゼロで除算するとNaNが返されます。 – supercat

0

私は測定アプリケーションを作っています。そして、-0は混合数(足とインチに分けるなど)に非常に便利です。

"feet"と "inches"に分離しようとしている変数 "length"があるとします。

(これはJavaコードですが、C++でも同じ考えが当てはまります)。長さが-1フィートと0フィートの間である場合

feet = Math.signum(length) * Math.floor(Math.abs(length/12)); 
// could also do feet = length>0 ? Math.floor(length/12) : Math.ceil(length/12) 
inches = Math.abs(length) % 12; 

、我々はそれが言いたいと思い-0足のために私たちはそれが負であることを知っています。

関連する問題