标签: floating-accuracy

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

比较浮点值有多危险?

我知道因UIKit使用CGFloat分辨率独立坐标系而使用.

但我想,以检查是否例如每次frame.origin.x0它让我感到恶心:

if (theView.frame.origin.x == 0) {
    // do important operation
}
Run Code Online (Sandbox Code Playgroud)

是不是CGFloat有比较时容易误报==,<=,>=,<,>?这是一个浮点,他们有不寻常的问题:0.0000000000041例如.

Objective-C在比较时是在内部处理这个,还是可能发生origin.x读取为零的情况并不是0真实的?

c floating-point objective-c floating-accuracy ios

381
推荐指数
6
解决办法
9万
查看次数

为什么这些数字不相等?

以下代码显然是错误的.有什么问题?

i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud)

floating-point r floating-accuracy r-faq

263
推荐指数
4
解决办法
4万
查看次数

使用==比较Java中的浮点数有什么问题?

根据这个java.sun页面 ==是Java中浮点数的相等比较运算符.

但是,当我输入以下代码时:

if(sectionID == currentSectionID)
Run Code Online (Sandbox Code Playgroud)

进入我的编辑器并运行静态分析,我得到:"JAVA0078浮点值与==相比"

使用==比较浮点值有什么问题?这样做的正确方法是什么? 

java equality floating-accuracy

170
推荐指数
10
解决办法
15万
查看次数

为什么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')
Run Code Online (Sandbox Code Playgroud)

python floating-point rounding floating-accuracy ieee-754

154
推荐指数
4
解决办法
1万
查看次数

是否可以通过减去两个不相等的浮点数得到0?

在以下示例中是否可以将除以0(或无穷大)?

public double calculation(double a, double b)
{
     if (a == b)
     {
         return 0;
     }
     else
     {
         return 2 / (a - b);
     }
}
Run Code Online (Sandbox Code Playgroud)

在正常情况下,它当然不会.但是,如果a并且b非常接近,可能会(a-b)导致0计算的精确性?

请注意,这个问题适用于Java,但我认为它适用于大多数编程语言.

floating-point double floating-accuracy ieee-754

130
推荐指数
7
解决办法
9872
查看次数

什么是1.0的最接近的两倍,那不是1.0?

有没有办法以编程方式获得最接近1.0的double,但实际上不是1.0?

一种hacky方法是将double转换为相同大小的整数,然后减去一个.IEEE754浮点格式的工作方式,最终将指数减少一,同时将小数部分从全零(1.000000000000)更改为全1(1.111111111111).但是存在一些机器,其中整数存储为little-endian而浮点存储为big-endian,因此并不总是有效.

c++ floating-point floating-accuracy

86
推荐指数
3
解决办法
5102
查看次数

在Javascript中处理浮点精度

y在javascript中有大量的数值.我想通过将它们舍入到最接近的倍数来对它们进行分组x,并将结果转换为字符串.

如何绕过恼人的浮点精度?

例如:

0.2 + 0.4 = 0.6000000000000001
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事:

>>> y = 1.23456789 
>>> x = 0.2 
>>> parseInt(Math.round(Math.floor(y/x))) * x; 
1.2000000000000002
Run Code Online (Sandbox Code Playgroud)

和:

>>> y = 1.23456789 
>>> x = 0.2 
>>> y - (y % x)
1.2000000000000002
Run Code Online (Sandbox Code Playgroud)

javascript floating-point double floating-accuracy numerical-methods

83
推荐指数
3
解决办法
16万
查看次数

PHP - 浮点数精度

$a = '35';
$b = '-34.99';
echo ($a + $b);
Run Code Online (Sandbox Code Playgroud)

结果在0.009999999999998

怎么了?我想知道为什么我的程序会报告奇怪的结果.

为什么PHP没有返回预期的0.01?

php floating-point precision floating-accuracy

77
推荐指数
4
解决办法
4万
查看次数

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

我试图将十进制数截断为小数位.像这样的东西:

5.467   -> 5.46  
985.943 -> 985.94
Run Code Online (Sandbox Code Playgroud)

toFixed(2)做正确的事情,但它完成了价值.我不需要四舍五入的值.希望这在javascript中是可能的.

javascript floating-point floating-accuracy

76
推荐指数
11
解决办法
13万
查看次数