相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

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万
查看次数

使用==运算符比较float/double值

当我开始使用相等运算符比较两个浮点值时,我使用的代码审查工具会引用以下内容.什么是正确的方法以及如何做到这一点?是否有一个帮助函数(commons-*),我可以重用它?

描述

无法使用equals(==)运算符比较浮点值

说明

通过使用等式(==)或不等式(!=)运算符来比较浮点值并不总是准确的,因为舍入错误.

建议

比较两个浮点值以查看它们是否接近值.

float a;
float b;

if(a==b)
{
..
}
Run Code Online (Sandbox Code Playgroud)

java floating-point

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

工作小数点数

我在java中编写了一个关于浮点的程序,但得到的输出并不准确; 而用C编写的相同程序确实产生了准确的结果.

代码片段:

public class One {

public static void main(String...args){

    double i, num=0.0;
    for(i=0;i<10;i++)
    num=num+0.1;
    System.out.println(num);

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:0.9999999999999999

C中的程序是这样的

#include<stdio.h>
main()
{

double i,num=0.0;
for(i=0;i<10;i++)
num=num+0.1;

printf("%f",num);

}
Run Code Online (Sandbox Code Playgroud)

输出:1.00000

我究竟做错了什么?

java floating-point-precision

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

使用Double进行财务软件

我知道这个问题已经多次讨论过,但我对答案并不完全满意.请不要回答"双打不准确,你不能代表0.1!你必须使用BigDecimal"......

基本上我正在做一个财务软件,我们需要在内存中存储很多价格.BigDecimal太大了,无法容纳缓存,因此我们决定切换到double.到目前为止,我们没有因为正当理由而遇到任何错误,我们需要12位数的准确度.12位数的估计基于这样一个事实:即使我们以百万谈话,我们仍然能够处理美分.

double给出15位有效十进制数字精度.如果你在显示/比较它们时绕过你的双打,会出现什么问题?

我猜问题是不准确的积累,但有多糟糕呢?在它影响第12位之前需要多少次操作?

你看到双打的其他问题吗?

编辑:关于很久,这绝对是我们所想到的.我们正在做很多除法乘法,长期不会很好地处理(丢失小数和溢出),或者至少你必须非常小心你所做的.我的问题更多的是关于双打理论,基本上有多糟糕,是否可以接受不准确?

编辑2:不要试图解决我的软件,我不准确:).我重新提出这样一个问题:如果你只需要12个数字并且在显示/比较时你是否会翻倍,那么不准确的可能性有多大?

java floating-point double bigdecimal ieee-754

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

分割双打时可能出错

我想检查相等2分数.我认为我写的方法不正确,因为可能会失去准确性.我是对还是错?

public boolean equals(Rational r) {
    return (double) numerator / denominator == (double) r.numerator / r.denominator;
}
Run Code Online (Sandbox Code Playgroud)

java double divide

0
推荐指数
1
解决办法
77
查看次数