タグ

ブックマーク / zenn.dev/mod_poppo (2)

  • 標準ライブラリーが提供する数学関数はどのくらい正確か、あるいはどの程度環境依存するのか

    大抵のプログラミング言語では、数の四則演算だけではなく、exp や sin や pow などの数学関数が提供されています。この記事では、これらの数学関数について どのくらいの精度が期待できるのか? どのくらい再現性があるのか? という話題を扱います。 正確な計算は難しい 無限大やNaNを除く有限の浮動小数点数は、数学的な実数を表していると考えられます。例えば、1.5 という浮動小数点数なら1.5という実数に対応します。ソースに 0.1 と書いた浮動小数点数が数学的には 0.1000000000000000055511151231257827021181583404541015625 という実数に対応することもあるかもしれませんが、何らかの実数に対応していることは確かです。 そこで、四則演算や数学関数の仕様としては「与えられた浮動小数点数を正確な実数とみなし、演算を適用し、得られた実数に最も

    標準ライブラリーが提供する数学関数はどのくらい正確か、あるいはどの程度環境依存するのか
  • 新しくプログラミング言語を作る際に数値型をどうするべきか

    この記事は、新しくプログラミング言語を設計する際に数値型をどうするべきかについて、私の持論をまとめたものです。 数の体系 JavaScript(BigInt以前)やLua(〜5.2)などは唯一の数値型が浮動小数点数型で、整数も実数も同じ「number」型で表現します。ミニマルな言語を作るのならそういう設計もアリかもしれませんが、ネイティブコンパイルも視野に入る実用的な言語を作るなら整数と実数を一緒くたにする設計はやめた方が良いと思います。 特に、JavaScriptにコンパイルする言語を作るからと言って、数値型の設計まで真似る必要はありません。 整数を浮動小数点数で表現すると、思わぬ性能低下の要因になったりします。最近(2023年2月)、次のツイートが話題になりました: これは正のゼロと負のゼロが値として区別され、正のゼロは内部的に整数扱いされるのに対し負のゼロはそうではないことによるもの

    新しくプログラミング言語を作る際に数値型をどうするべきか
  • 1