0

数学が苦手で申し訳ありません。自分の質問に答えるためにこれを理解しようとしましたが、確信が持てません。

PHP が Float を基数 10 ではなく基数 2 に格納することは誰もが知っています。

私は 0.5 を唯一の浮動小数点数として使用している一連の計算を行っており、それらが 0.500001 または 0.4999999 として格納されるかどうかを理解しようとすると (丸めのために大きな違いがあります!!!)、0.5 がbase2 に正確に格納されます。

私のクエリは

A 正しく理解できましたか?

B 他に base2 に正確に格納される float は? 例: 0.25?

4

2 に答える 2

2

1/pow(x, 2) の任意の倍数は、float として正確に表すことができます。

つまり、x/2、x/4、x/8、x/16 ...などです。正確に表現できます。

浮動小数点数の格納方法の詳細については、http://kipirvine.com/asm/workbook/floating_tut.htmを参照してください。

GMPは、高精度の計算に適したライブラリです。

于 2013-07-31T09:20:11.473 に答える
1

PHP はバイナリ浮動小数点を使用する必要はありません。システムによります。

多くのシステムでは、IEEE-754 バイナリ浮動小数点が使用されています (不完全な場合や、非正規数をゼロにフラッシュするなどの変更が加えられている場合があります)。

IEEE-754 64 ビット 2 進浮動小数点では、次のような整数Fの 2 乗 2 Eとして表現できる場合にのみ、数値は正確に表現できます。

  • Fの大きさは2 53未満です。
  • –1074 ≤ E < 972。

たとえば、½ は 1•2 –1に等しくなります。1 は整数制限未満の整数であり、–1 は指数制限内の指数です。したがって、½ は表現可能です。

2 53 +1 は表現できません。このままでは整数制限外の整数です。制限内に収まるように 2 のべき乗でスケーリングしようとすると、整数ではない数値が得られます。そのため、この値を IEEE-754 64 ビット 2 進浮動小数点で正確に表す方法はありません。

1/3 と 1/10 も表現できません。2 のべき乗でスケーリングしても整数は生成されないからです。

于 2013-07-31T12:24:08.587 に答える