[PHP-users 1518] Re: 小数点以下の四捨五入について

Osamu Shigematsu php-users@php.gr.jp
Fri, 24 Aug 2001 22:07:17 +0900


重松です。こんにちは。

近藤さん、フォロー頂きありがとうございます。

> round() 関数ですが、PHP3 と PHP4 では、実行結果が
> 違うようなので注意が必要です。
> 
> PHP3: round(2.5) は、2 になります。(PHP 3.0.18 国際化版)
> PHP4: round(2.5) は、3 になります。(PHP 4.04 )
> OS : Linux (TLJ WS 6.0) glibc-2.1.2
> 
> 仕様変更になったんですかね。
> 
> マニュアルでは違いが読み取れないですが、ソース見てる
> 暇がないのでどなたか詳しい方、フォローお願い。

マニュアルでは、「四捨五入」とありますね。

> 少くとも PHP3 の round()は、所謂四捨五入ではなく、
> Banker's Rounding という方式で、小数部が .5 の時、
> 常に切り上げるのではなく、切り上げ/切捨てを交互に
> 行なう方式です。google などで Banker's Rounding とか
> IEE754 で検索してみてください。
  ~~~~~~

IEEE ですよね?

あと、個人的には、2 進浮動小数演算なので、10 進数での希望の精度が得られない、
ということもキチンと考える必要がある問題と思います。

以前、他の ML で特定の値がキチンと代入できないからバグだと騒ぐ、頭がバグって
る御仁がいらっしゃったのですが、あれは参りました。
http://rb.vio.co.jp/mlspool/msg08327.html

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/
mailto:shige@ravi.ne.jp