Сегодня мы поговорим о вещественных числах. Точнее, о представлении их процессором при вычислении дробных величин. Каждый из нас сталкивался с выводом в строку чисел вида 3,4999990123 вместо 3,5 или, того хуже, огромной разницей после вычислений между результатом теоретическим и тем, что получилось в результате выполнения программного кода...
ハブの記事をもとにhttps://habr.com/company/xakep/blog/257897/。
未確認ですが、動作するようです
ハブの記事をもとにhttps://habr.com/company/xakep/blog/257897/。
未確認 ですが、動作するようです
もし、0.07という正しい結果が出れば、正しく動作していることになります。
もし、0.07という正しい結果が出れば、正しく動作していることになります。
が動作しない(((
が動作しない(((
そして、どんなアルゴリズムも通用しない...。
そして、どんなアルゴリズムも通用しない...。
になりますが、問題は与えられた精度で、大きな計算コストの都合で、倍精度の数は、任意の形式で再計算することができます:±符号 - (1 +仮数/252)×2順序- 1023
仮数と次数を抽出するのは簡単ですが、この問題を直接解くのは面白くありません。
になりますが、問題は与えられた精度で、大きな計算コストの都合で、倍精度の数は、任意の形式で再計算することができます:±符号 - (1 +仮数/252)×2順序- 1023
仮数と次数を分離するのは簡単だが、この問題を正面から解決するのはおもしろくない
もし、精度が出るのであれば、この件は意味がない。すでに例を挙げましたが、0.07は小数点以下が2桁です。でも、プログラムで桁数を計算しようとすると13桁になってしまう...。しかも0.07は計算結果ではなく、変数を介さずに手入力されている。
こんなオプションもあります。
正気に戻ってください。まともに議論するのもナンセンスな話だ。
著者は単にダブル変数の内部構造を完全に誤解しているのです。
О!
私はすべてを知っているとは言っていない、何が間違っているのか、あなたのバージョンを見せてください。
プログラム中に定義されているdouble型変数が、それぞれ小数点以下何桁目なのかを知りたい。これはナンセンスだ。double 型の変数はすべて同じ表現になります。Float -浮動小数点として 表現されます。ポイントは左にあることもあれば、右にあることもあり、それは数字の値によって異なります。100万と100万分の1は異なる精度で表現されます。
また、このようなバリエーションもあります。
いいえ、それはうまくいきません、私は昨日タイプ変換でやりました、ここにスクリプトがあります、あなたの例と私の例です。
の結果です。
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1.DoubleToDigits() = 11
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1.デジット() = 0
2018.11.13 01:49:16.131 tst (EURUSD,M30) 2.DoubleToDigits() = 3
2018.11.13 01:49:16.131 tst (EURUSD,M30) 2.デジット() = 3
FP-Printing-PLDI96.pdfで ググれば出てくるが、誰かがアルゴリズム通りにやってくれるとは思えない。