Gargi Sharmaによる浮動小数点数の印刷


私はTaridesでOCamlオープンソースに貢献するソフトウェアエンジニアです.以前、私はBloomberg、Over、およびeBayで働いていました.私も再発センターに出席しました.
私の話では、印刷フロートの後ろの問題を説明しています.下記の私の話のためのメモを見てください.

第1部
Python RPLで0.3 + 0.03を印刷するとどうなりますか?
  • 出力は0.32999999999999996です.この問題は浮動小数点演算の場合や浮動小数点数の印刷と共にある.
  • 印刷フェーズは、浮動小数点数の2進数表現を可能な限り数桁の人間に読み取り可能な10進表現に変換し、結果を伝える.

  • 第二節
  • 問題は、すべての小数点数がバイナリ形式で正確に表されることができないということです.
  • 浮動小数点数を2進数と逆に変換する例を示します.すべてのバイナリ番号には10進数の等価数がありますが、10進数は10進数ではありません.
  • -----------------------------------------------------
    |   signed bit   |  exponent  |  mantissa   |
    -----------------------------------------------------
    
  • “間違った”出力は0.32999999999999996と“正しい”出力0.33の両方が同じ間隔に落ちる.
  • は、バイナリで0.3の正確な表現されていないので、アルゴリズムは、この数を丸める方法を決定し、どのように多くの数字を正確な表現を得るためにオフにスライスする必要があります.
  • どのように、このアドレスを解決する最初のアルゴリズムは、問題を解決しましたか?
    1990年から浮動小数点数を印刷するためのDragonOアルゴリズム
  • は視覚的な例でアルゴリズムを説明します.このアルゴリズムは以下のアルゴリズムに基づいています
  • 情報保存-あなたが数を印刷して、もう一度それを解析するとき、あなたは同じ番号
  • を得ることができなければなりません
  • は、第1の基準
  • を維持している間、最短数を印刷する
  • 正確に丸め
  • は、一例のアルゴリズムの上記基準を示す.
  • DragonO 4の欠点-任意精度の算術演算は遅い(ハードウェアではなくソフトウェアで実装する必要があるため)
    何がドラゴンの土地で新しいですか?
    グリース(2010)
  • 印刷フロートスペースの次のジャンプは、2010年(最初の論文が出版された20年後!)
  • Dragon 4の大きな欠点の1つは任意精度の数値を使用していたが、Grisuはマシン整数を使用した.グリスは、正確な時間の99.4 %であり、0.6 %の残りの残りのためのDragono 4に下落する必要があります.
  • は、以前と同じ例でgrisuについて説明します.
  • グリッチはV 8とMozilla JavaScriptエンジンの両方で使用されて、Dragono より5倍速いです
  • グリス対Dragonoのベンチマークは、
  • を示します
    リー・ナンバー(2018年)
    Grisuで改善している
  • は、DragonO 4に対してフォールバックする必要はありません
  • 以前と同様の例で、RYが
  • としている
  • は、Dragon 4対Grisu対リーAlu
  • のベンチマークを示します
    スライド:
    参考文献
    http://kurtstephens.com/files/p372-steele.pdf
    https://github.com/dtolnay/ryu
    https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    https://cseweb.ucsd.edu/~lerner/papers/fp-printing-popl16.pdf
    Here is a download link to the talk slides (PDF)
    この話は、7月23日にCodeLand:Distributedの一部として発表される.話が会議の一部として流れたあと、それは録画されたビデオとしてこのポストに加えられます.