Tag: 浮点精度

浮点限制

我的代码: a = '2.3' 我想显示一个浮点值。 由于a是一个string,我试过: float(a) 我得到的结果是: 2.2999999999999998 我想要解决这个问题。 请,请帮助我。 我正在按照这个教程 。

浮点平等和容差

比较两个浮点数,如a_float == b_float正在寻找麻烦,因为由于四舍五入错误, a_float / 3.0 * 3.0可能不等于a_float 。 通常情况下, fabs(a_float – b_float) < tol 。 如何计算tol ? 理想情况下,容忍度应该大于一个或两个最低有效数字的值。 所以如果单精度浮点数使用tol = 10E-6应该是正确的。 但是,对于a_float可能非常小或可能非常大的一般情况,这不起作用。 如何正确计算所有一般情况下的tol ? 我特别感兴趣的是C或C ++的情况。

舍入错误?

在我的课程中,我被告知: 连续值大概在内存中表示,因此使用浮点计算涉及舍入错误。 这些是位模式的微小差异; 因此如果e和f是浮动的,testinge==f是不安全的。 引用Java。 这是真的? 我用double s和float s来比较语句,并且从来没有舍入的问题。 我从来没有读过类似的教科书。 虚拟机肯定是这个原因吗?

四舍五入 – “100”有什么特别之处?

Haskell有没有人对这个奇怪的舍入有一个解释(GHCi,版本7.2.1)。 一切似乎很好,除非我乘以100。 *Main> 1.1 1.1 *Main> 1.1 *10 11.0 *Main> 1.1 *100 110.00000000000001 *Main> 1.1 *1000 1100.0 *Main> 1.1 *10000 11000.0 编辑:令我感到困惑的是舍入误差只有在乘以100时才显示。 编辑(2):我收到的意见让我意识到,这与haskell完全无关,但浮点数的一般问题。 许多问题已经被问到(和回答)关于浮点数奇怪的问题,其中不确定的问题典型地将浮点数与实数混淆。 Perl,Python,JavaScript和C都报告1.1 * 100.0 = 110.00000000000001 。 这是C做的 double 10.0 * 1.1 = 11.000000000000000000000000 double 100.0 * 1.1 = 110.000000000000014210854715 double 110.0 = 110.000000000000000000000000 double 1000.0 * 1.1 = 1100.000000000000000000000000 “为什么这只发生在乘以100”(即使有一个精确的表示110.0)仍然没有答案,但我想没有一个简单的答案,除了完全通过浮点乘法(通过感谢Dax Fohl强调10是没有什么特别的二进制)

表示中的浮点错误?

当我做这个乘法 0.94 * 8700 输出是 8177.999999999999 但应该是 8178 我使用java,但我不认为这个错误是与一个特定的编程语言现在我的问题是…为什么发生这种情况? 和其他数字(只是一个例子)导致相同的错误?

python浮点数

我有点困惑为什么python在这种情况下添加一些额外的十进制数,请帮助解释 >>> mylist = ["list item 1", 2, 3.14] >>> print mylist ['list item 1', 2, 3.1400000000000001]

正确使用std :: cout.precision() – 不打印尾随零

我看到很多关于浮点数的精确数字的问题,但是我特别想知道为什么这个代码 #include <iostream> #include <stdlib.h> int main() { int a = 5; int b = 10; std::cout.precision(4); std::cout << (float)a/(float)b << "\n"; return 0; } 显示0.5 ? 我期望看到0.5000 。 是因为原始的整数数据types吗?

如何正确和标准地比较花车?

每当我开始一个新的项目,当我需要比较一些浮点或双variables,我写这样的代码: if (fabs(prev.min[i] – cur->min[i]) < 0.000001 && fabs(prev.max[i] – cur->max[i]) < 0.000001) { continue; } 然后我想摆脱这些魔术variables0.000001(和0.00000000001为双)和晶圆厂,所以我写了一个内联函数和一些定义: #define FLOAT_TOL 0.000001 所以我想知道有没有这样做的标准方法? 可能是一些标准的头文件? 有浮动和双重限制(最小值和最大值)

在javascript中截断(不舍入)十进制数字

我正在尝试将十进制数字截断为小数位。 像这样的东西: 5.467 -> 5.46 985.943 -> 985.94 toFixed(2)只是做了正确的事情,但是却把价值收掉了。 我不需要四舍五入的价值。 希望这是可能的JavaScript。

Python的浮点任意精度可用?

只是为了好玩,因为这很简单,我写了一个简短的程序来生成嫁接数字 ,但是由于浮点精度问题,没有find一些更大的例子。 def isGrafting(a): for i in xrange(1, int(ceil(log10(a))) + 2): if a == floor((sqrt(a) * 10**(i-1)) % 10**int(ceil(log10(a)))): return 1 a = 0 while(1): if (isGrafting(a)): print "%d %.15f" % (a, sqrt(a)) a += 1 这段代码错过了至less一个已知的嫁接号码。 9999999998 => 99999.99998999999999949999999994999999999374999999912…乘以10**5后似乎降低了额外的精度。 >>> a = 9999999998 >>> sqrt(a) 99999.99999 >>> a == floor((sqrt(a) * 10**(5)) % 10**int(ceil(log10(a)))) […]