Сегодня мы поговорим о вещественных числах. Точнее, о представлении их процессором при вычислении дробных величин. Каждый из нас сталкивался с выводом в строку чисел вида 3,4999990123 вместо 3,5 или, того хуже, огромной разницей после вычислений между результатом теоретическим и тем, что получилось в результате выполнения программного кода...
根据Hubs上的一篇文章:https://habr.com/company/xakep/blog/257897/
没有真正测试过,但似乎是有效的
根据Hubs上的一篇文章:https://habr.com/company/xakep/blog/257897/
没有真正测试过,但似乎是有效的
如果它给出了0.07的正确结果,那么它就能正确工作。
如果它给出了0.07的正确结果,那么它就能正确工作。
不起作用 ((((
不起作用 ((((
而且没有任何算法会起作用...
而且没有任何算法会起作用...
将,但问题是在给定的精度和在权宜之计的大计算成本下,双精度的数量可以以任何格式重新计算:±sign-(1+mantissa/252)×2阶-1023
提取尾数和顺序很容易,但直接解决这个问题并不有趣。
将,但问题是在给定的精度 和在权宜之计的大计算成本下,双精度的数量可以以任何格式重新计算:±sign-(1+mantissa/252)×2阶-1023
隔离尾数和顺序是很容易的,但正面解决这个问题并不有趣
如果准确度得到了,那么这整个事情就没有意义了。我已经举了一个例子,0.07有两个小数位。但如果你试图以编程方式计算数字,你会得到13个...而0.07不是计算的结果,而是手动输入的,甚至没有通过变量。
还有这个选项。
请清醒地认识到这一点。这是一派胡言,甚至不应该被认真讨论。
作者只是完全误解了双变量的内部运作。
О!
我没有声称知道所有的事情,最好告诉我什么是错的,或者让我看看你的版本
你想知道在你的程序中定义的每个双数类型的变量有多少个小数位。这就是胡说八道。所有double类型的变量都有相同的表示方法。它们被表示为Float -浮点。有时该点在左边,有时在右边--这取决于数字的价值。100万和100万分之一以不同的精度表示。
还有这样一种变体。
不,这行不通,我昨天通过类型转换做到了,这是脚本,你的例子和我的。
结果。
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1.DoubleToDigits() = 11
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1.Digit() = 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.Digit() = 3
你可以谷歌一下FP-Printing-PLDI96.pdf,但我怀疑有人会按照算法来做所有的事情。