タグ

2022年11月7日のブックマーク (3件)

  • ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記

    ECMAScriptの浮動小数点数の丸め関数である Number.prototype.toFixed() について調べてみたところ、浮動小数点数をわかっている人が作った硬派な仕様だと感じたので、解説してみます。 浮動小数点数の丸めの善し悪しについて 私はプログラミング言語の浮動小数点数の丸め処理に興味があり、過去に関連記事を30以上書いています。こうした活動から得られた知見として、良い丸め関数には次のような性質があると考えています。 仕様がシンプルで直感的であること 仕様が抜け漏れなく文書化されていること バグを作り込みにくい仕様であること どれも良い関数の一般論のような話ですが、丸め処理に限って言えば簡単な話ではありません。そもそも浮動小数点数の性質が人の直感に反するため利用者にとっても実装者にとっても罠が多く、結果として上の条件を満たせないことが多いのです(私が面白いと感じるポイント

    ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記
  • PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合 - hnwの日記

    PHPのround関数はPHP5.3.0で一新されましたが、その挙動は複雑です。以前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった」では典型的な挙動を紹介しましたが、実際はもう少し細かい場合分けがあります。僕自身の整理も兼ねて、RFC*1およびPHPのCソースコードと対応づけながら何回かに分けて紹介していきます。 まずは、第2引数(精度)が大きすぎまたは小さすぎる場合の処理を紹介します。例えば次のコードを考えてみましょう。 <?php ini_set("precision",20); var_dump(round(5.3e-25,24)); //float(9.999999999999999237E-25) var_dump(1e-24); //float(9.999999999999999237E-25) 0.0000…ときて小数点以下第25位が5

    PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合 - hnwの日記
  • いまさら聞けないIT用語集 浮動小数点演算の単精度と倍精度って? (1/3)

    今回はジサトラショータ氏の「浮動小数点の単精度と倍精度って何?」という質問に答えよう。最近はこれに倍々精度や半精度も使われるようになっているので、非常にわかりにくかったりする。 計算式の桁数を抑えられる 浮動小数点 そもそもコンピューターは数字の演算に関して、整数演算と小数演算の2つに分けて実装しているのが普通である。これは「何桁まで処理する必要があるか」というニーズが根的に違うためだ。 整数の場合、普通(なにをもって普通というかはアレだが)は10桁くらいの計算ができれば十分である。もちろん企業における会計処理などでは10桁では足りない(売上1兆円を表現するのには12桁が必要だ)が、そういう規模の大きな処理は別途考えることにすれば、9桁か10桁あれば大体用が足りる。 ところが小数の場合、そもそも何桁まで処理できれば足りるか、というのはあまりにケースバイケースすぎる。たとえば利息の計算。1

    いまさら聞けないIT用語集 浮動小数点演算の単精度と倍精度って? (1/3)