タグ

浮動小数点に関するkenichiiceのブックマーク (9)

  • 作って理解する浮動小数点数① 基本編 - in neuro

    以前も浮動小数点数の記事を書いた(作る側の気持ちで理解する浮動小数点数 - in neuro)。だがその時は、浮動小数点数に関するアイデアの説明しかしておらず、実際の「浮動小数点数(IEEE754)」については説明しなかった。今回の記事の目的は、実際の浮動小数点数についてちゃんと解説し、またいくつかの演算をビット単位で自力で書くことで、理解を深めることである。 現実の浮動小数点数 演算について書くとは言ったが、その前に少し浮動小数点数についての基的なアイデアをおさらいしておこう。このあたりの知識は演算を理解する際にも必要になる。すでに知っている人には退屈だろうから、演算編で引っかかったときだけ見るのでも構わない。 浮動小数点数の基的構造 浮動小数点数はその名の通り、小数点の位置が動的に変わる数である。基的な表現方法は1.234x10-5のような指数表記と同様だ。 例えば単精度(32b

    作って理解する浮動小数点数① 基本編 - in neuro
  • https://crates.io/crates/ryu/

  • 数値計算 - Microsoft Cloud Numerics の数学関数をテストする

    図 2 の例から導き出せる結論は、少数の ULP の範囲内で正確なアルゴリズムを使用して特別な関数が実装されることです。図 2 で示される最悪の場合は、誤差が 6 ULP 以下で、これは数値の最低数位の小数点以下 log10(2^6) = 1.8 桁と一致します。倍精度浮動小数では、これは 1.3323e-015 の相対誤差に相当します。 最先端のテスト ここまでで、厳密なテスト手法を Microsoft Cloud Numerics 数学パッケージで使用されるアルゴリズムの検証にうまく適用できました。関数の条件数から導き出したテストの許容誤差を使用することで、誤差が関数の戻り値の最後の数桁でのみ発生している場合でも、不正確な関数の実装を特定して修正できるようになります。テストの許容誤差を固定すると、故意の誤り (関数の特異点の近接など) を引き起こさない厳密なテストを提供できません。テス

    数値計算 - Microsoft Cloud Numerics の数学関数をテストする
  • 2007年12月14日のブログ|16.78MHz

    kenichiice
    kenichiice 2012/11/08
    「x87内の8つのレジスタは全て80bit拡張倍精度浮動小数点数を入れるようになっており、メモリから持ってきた値が32bitだろうと64bitだろうと80bitに延ばしてレジスタに読み込まれる」
  • 浮動小数点演算ではまった話 - bkブログ

    浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに x86 特有のちょっとおもしろい 現象に遭遇したので紹介したいと思います。 パーセンテージの計算 簡単な C のプログラムでパーセンテージを計算しようと思い、 次のようなコードを書きました。 int x, y; ... int a = (double)x / y * 100; int a = x * 100 / y としないのは、 x が大きい場合に x * 100 が オーバーフローを起こす (INT_MAX を越える) ためです。 このコードは一見、期待通りに動いていたのですが、 しばらく使っていると、手元の環境では x = 53, y = 100 のときに a は 53 ではなく 52 になることに気づきました。 これは次の理由によります。 式の最初の (double)53 / 10

  • ÉâÆ°¾®¿ôÅÀ±é»»¤Ë¤Ä¤¤¤Æ

    ÉÕÏ¿ D ÉâÆ°¾®¿ôÅÀ±é»»¤Ë¤Ä¤¤¤Æ Ãí - ¤³¤ÎÉÕÏ¿¤Ï¡¢1991 ǯ 3 ·îȯ¹Ô¤Î "Computing Surveys" ¤Ë·ÇºÜ¤µ¤ì¤¿ "Every Computer Scientist Should Know About Floating-Point Arithmetic" ¹Æ (David GoldbergÃø) ¤òºÆÊÔ½¸¤·¡¢Ãøºî¸¢¤òÍ­¤¹¤ë Association for Computing Machinery ¼Ò (Copyright 1991) ¤Îµö²Ä¤Î¤â¤È¤Ë¡¢°õºþ¤·¤Ê¤ª¤·¤¿¤â¤Î¤Ç¤¹¡£ ³µÍ× ÉâÆ°¾®¿ôÅÀ±é»»¤Ï¡¢³µ¤·¤ÆÆñ²ò¤ÊÌäÂê¤È¤·¤Æ¼õ¤±¼è¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¥³¥ó¥Ô¥å¡¼¥

  • 数値計算ガイド

    kenichiice
    kenichiice 2011/11/15
    「D. 浮動小数点演算について 」
  • 浮動小数点数の比較

    浮動小数点数の比較アルゴリズム ホーム イントロダクション 許容値の選び方 close_at_toleranceアルゴリズム 編集 謝辞 参考 イントロダクション とても大きな数値は小さな数値では、abs(f1-f2) <= eというシンプルな解放では浮動小数点数の 等値チェックはうまくいかないことがある。そのため、operator=(...)の使用はふさわしくないと言える。 この浮動小数点数比較アルゴリズムはより信頼性の高い、Knuthの[1]の文献で紹介されている方法を元にしている。 不動小数点数 u と v 、許容値 e が与えられたとする。

  • FLP35-C. 浮動小数点数値を比較する際には精度を考慮する

    FLP35-C. 浮動小数点数値を比較する際には精度を考慮する C の浮動小数点演算は正確ではない。特に、浮動小数点数を比較する際は、可搬性があり計算結果が同じになる方法で行う必要がある。 違反コード c と a / b の比較の結果は、あらかじめ予測することはできず、実行するマシンやコンパイラ、最適化レベルの違いによって変わる可能性がある。 float a = 3.0; float b = 7.0; float c = a / b; if (c == a / b) { printf("Comparison succeeds\n"); } else { printf("Unexpected result\n"); } 処理系固有の詳細 このコードを、IA-32 Linux 上の GCC 3.4.4 で最適化レベル 1 以上、あるいは IA-32 Windows XP 上の Microsof

  • 1