2011-10-05 19 views
6

IEEE-754単精度形式(一部の言語/プラットフォームでは一般にfloatとして知られています)で表される任意の数を指定すると、倍精度形式でも数値を正確に表すことができますか?すべての単精度数値は倍精度形式で表現できますか?

もしそうなら、倍精度を単精度と倍精度から四倍精度に変換する場合、そのプロパティは有効ですか?

+0

私の想起は、仮数/指数に割り当てられたビット数だけが1つだけ異なり、2倍だけ異なることです。しかし、私はリファレンスを持っていないので、これは答えではありません。しかし、+1、それは良い質問です。 – kdgregory

答えて

5

はい、double型はfloat型の任意の数値を表すことができます。同様に4倍精度などの場合

浮動小数点数は、1.01b x 2^-1(この場合は0.625)のような形式で表されます。数値の重要な要素は、有効数字です。これは、基本的に、最初の数字の直後の基点と指数の2進数です。

2進浮動小数点形式の主な違いは、各コンポーネントのビット数だけです。数値が使用するビット数が多いほど、各部分に使用可能なビットが増えます。そのため、32ビットの「浮動小数点数」は仮数部には1.01000000000000000000000、ドットの後ろには約50桁の「倍精度」があります。これは、浮動小数点数で正確に表現できる任意の数も、精度の向上(読み取り:より重要な数字)と増加範囲の両方を持つため、倍精度でも正確に表現できることを意味します。これは、64ビット整数変数が32ビット整数をどのように保持できるかと似ています。余分なビットはほとんどかなり未使用になります。

もちろん、丸め誤差のために切り落とされたビットは、doubleに変換すると数値に戻りません.0.3を浮動小数点数に使用すると0.2999999875のような不正確な結果になりますまたは何か(私は計算したい気がしません)、あなたがダブルに変換すると0.3に近づくことはないでしょう - それはまだ0.2999999875になるでしょう。より近似したい場合は、最初からdoubleを使って計算をやり直す必要があります。

3

はい。実際には、より確実な声明を出すことができます。の製品は、2つの単精度数の正確な表現が正確に倍精度で表現できます(半分、1つまたは2つと4倍)。

関連する問題