【发布时间】:2011-06-07 13:43:04
【问题描述】:
这里有人可以帮助我了解如何确定浮点限制何时会导致计算错误。比如下面的代码。
CalculateTotalTax = function (TaxRate, TaxFreePrice) {
return ((parseFloat(TaxFreePrice) / 100) * parseFloat(TaxRate)).toFixed(4);
};
我无法输入任何两个值,这导致此方法的结果不正确。如果我删除 toFixed(4) ,我实际上可以看到计算开始失去准确性的位置(大约在小数点后 6 位左右)。尽管如此,我对浮点数的理解是,即使是很小的数字有时也可能无法表示或我误解了,并且总是可以准确地表示 4 位小数(例如)。
MSDN 将浮点数解释为 such...
这意味着他们无法准确掌握 任何数量的表示 不是二进制分数(形式为 k / (2 ^ n) 其中 k 和 n 是整数)
现在我假设这适用于所有浮点数(包括 javascript 中使用的浮点数)。
基本上我的问题归结为这一点。如何确定任何特定方法是否容易受到浮点运算错误的影响,这些错误将以什么精度实现以及产生这些错误需要哪些输入?
希望我的问题是有道理的。
【问题讨论】:
-
可能跟这个话题有关:en.wikipedia.org/wiki/Machine_epsilon
-
小马托尼,也称为Jon Skeet,有一个excellent explanation。易读、清晰、有趣且不刺激,而且不像经常在此主题上发布的 some links 那样沉重。
标签: c# javascript vb.net floating-point