第1回から珍妙なタイトルで申し訳ないが,かつて銀行の情報システム部門に在籍し,多くの年月を“トラブルシューター”として過ごした筆者は,このように感じることがたびたびあった。 トラブルシューターと言っても,極めて理論的かつ科学的な存在であるSE(システム・エンジニア)の一員だ。そのSEに“超能力者”などという非科学的な形容を使うのはいかにも不謹慎なのだろう。しかし,実際そう思わざるを得ないような体験を何度もしているのだから仕方がない。 当時,筆者は国際業務を支援する基幹系システムの保守を担当していた。このシステムは構造が古かったせいか,とにかくトラブルを起こすことが多く,筆者は障害対応に忙殺される毎日を送っていた。 その経験から,「システムの障害対応で最も重要なことは何か」と聞かれれば,筆者は迷うことなく「直感」と答える。障害発生の連絡を受けたとき,閃光のように脳裏をよぎる直感。勝負はたいて
IEEE 754 ですねー。これを知らないデベロッパも多いと聞きます。 VB6において、丸め関数は"INT","FIX","ROUND"があります。 このうち、"ROUND"は「最も近い偶数に丸める」という四捨五入であり、一般的なものとは違います(よく嵌るワナ)。 「偶数丸め」は IEEE 754 で定められており、JIS や ISO にも同じ規定があります。 多くの Round() 関数の挙動もこの IEEE 754 に則った「偶数丸め」です。 浮動小数点数(ふどうしょうすうてんすう)は、コンピュータにおける実数の近似値の表現方式。 実際にやってみた '[VB6/VBScript(ASP)/VBA(Excelマクロなど)] MsgBox(Round(24.5)) '24.5を四捨五入で整数にすると25 '[VB.NET(ASP.NET)] MsgBox(Math.Round(24.5).
知っている人は当たり前なネタですが、知らないと素通りしてそのままにしてしまいそうなネタです。 多くの言語に Round() 関数が用意されていますが、これは四捨五入する関数ではなく、「丸め」る関数です。 名前のまんま。 実は私、最近まで「丸め」とは「四捨五入のコンピュータ系方言」くらいに思っていたのですが、実は違いました。もっと広い言葉です。 まず、「丸め」とはある精度以下の数値情報を捨てる処理のことで、「四捨五入」を含みます。他に少なくとも切り上げ、切捨て、そして今回話題にする「偶数丸め」があります。(もっとあるかも知れません) 「偶数丸め」は IEEE 754 で定められており、JIS や ISO にも同じ規定があります。 多くの Round() 関数の挙動もこの IEEE 754 に則った「偶数丸め」です。 「偶数丸め」は四捨五入とほぼ同一ですが、次の1点が違います。 「丸め単位の丁
(2012/11/01追記) 4年ほど前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった - hnwの日記」でお伝えした通り、PHP 5.3.0から別の実装が採用されており、本ページで指摘しているような挙動のPHPは既に絶滅危惧種です。念のため。 さて、プログラミングの話題もたまには書いてみます。今回はPHPのround関数の挙動が変だ!という話題です。 round()は浮動小数点数を四捨五入する関数で、大抵の言語に同じ名前で実装されているかと思います。ではPHPのround関数の何が問題なのか、ちょっと試してみましょう。 $ uname -sro Linux 2.6.9-42.0.10.plus.c4smp GNU/Linux $ php --version PHP 5.1.6 (cli) (built: Feb 23 2007 06:56:38)
6月3日 ホームページをリニューアルしています。 6月1日 6月16日より新事務所にて業務開始いたします。 現在準備期間中です。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く