Questions tagged «floating-accuracy»

关于对浮点数执行的操作的准确性。


11
比较浮点值有多危险?
我知道UIKit使用CGFloat是因为分辨率独立的坐标系。 但每次我要检查是否例如frame.origin.x被0这让我感到恶心: if (theView.frame.origin.x == 0) { // do important operation } 是不是CGFloat容易误报比较时==,<=,>=,<,>?这是一个浮点,它们存在不精确的问题:0.0000000000041例如。 Objective-C比较时是否在内部处理此问题,还是会发生origin.x读为零的a与未读0为true的情况?


21
使用==比较Java中的浮点数有什么问题?
根据此java.sun页面,它 ==是Java中浮点数的相等比较运算符。 但是,当我键入以下代码时: if(sectionID == currentSectionID) 进入编辑器并运行静态分析,我得到:“ JAVA0078与==”相比的浮点值 什么是错的使用==比较浮点值?正确的方法是什么?

4
为什么4 * 0.1的浮点值在Python 3中看起来不错,但3 * 0.1却不这样?
我知道大多数小数都没有确切的浮点表示形式(浮点数学运算符是否损坏?)。 但是,当两个值实际上都具有丑陋的十进制表示形式时,我看不出为什么4*0.1将其很好地打印为0.4,但3*0.1不是这样: >>> 3*0.1 0.30000000000000004 >>> 4*0.1 0.4 >>> from decimal import Decimal >>> Decimal(3*0.1) Decimal('0.3000000000000000444089209850062616169452667236328125') >>> Decimal(4*0.1) Decimal('0.40000000000000002220446049250313080847263336181640625')

12
是否可以通过减去两个不相等的浮点数来获得0?
在下面的示例中是否可以除以0(或无穷大)? public double calculation(double a, double b) { if (a == b) { return 0; } else { return 2 / (a - b); } } 在正常情况下,当然不会。但是如果a和b非常接近,会由于计算精度而(a-b)导致结果0吗? 请注意,这个问题是针对Java的,但是我认为它将适用于大多数编程语言。


4
最接近1.0的双精度数是不是1.0?
有没有办法以编程方式获取最接近1.0的double,但实际上不是1.0? 一种可行的方法是将双精度数存为相同大小的整数,然后减去一个。IEEE754浮点格式的工作方式是,将小数部分从全零(1.000000000000)更改为全1(1.111111111111),最终将指数减小了一个。但是,有些机器将整数存储在低位在前,而浮点存储在大在前,因此这并不总是可行。

3
为什么D中有0.1 + 0.2 == 0.3?
assert(0.1 + 0.2 != 0.3); // shall be true 是我最喜欢的一种语言使用本机浮点算法的检查。 C ++ #include <cstdio> int main() { printf("%d\n", (0.1 + 0.2 != 0.3)); return 0; } 输出: 1 http://ideone.com/ErBMd 蟒蛇 print(0.1 + 0.2 != 0.3) 输出: True http://ideone.com/TuKsd 其他例子 Java:http://ideone.com/EPO6X C#:http://ideone.com/s14tV 为什么D不正确?据了解,D使用本机浮点数。这是一个错误吗?他们是否使用某些特定的数字表示形式?还有吗 相当混乱。 d import std.stdio; void main() { writeln(0.1 …

6
(.1f + .2f ==。3f)!=(.1f + .2f).Equals(.3f)为什么呢?
我的问题不是关于浮动精度。这是关于为什么Equals()不同于的原因==。 我明白为什么.1f + .2f == .3f是false(同时.1m + .2m == .3m是true)。 我得到的==是参考,.Equals()是价值的比较。(编辑:我知道这还有更多。) 但是,为什么(.1f + .2f).Equals(.3f) true,而(.1d+.2d).Equals(.3d)仍然是false? .1f + .2f == .3f; // false (.1f + .2f).Equals(.3f); // true (.1d + .2d).Equals(.3d); // false
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.