相关疑难解决方法(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万
查看次数

在Java中将Java打印到System.out

这段代码没有像我想象的那样工作.

a=-1;   
b=0.1;   
for(i=0;i<=20;i++){  
    System.out.println(i + ". x= " + a);   
    a=a+b;   
}       
Run Code Online (Sandbox Code Playgroud)

在控制台上我应该看到:

0. x= -1.0  
1. x= -0.9  
2. x= -0.8  
3. x= -0.7  
4. x= -0.6  
5. x= -0.5  
6. x= -0.4  
7. x= -0.3  
Run Code Online (Sandbox Code Playgroud)

...等等

但这是发生的事情:

0. x= -1.0  
1. x= -0.9  
2. x= -0.8  
3. x= -0.7000000000000001  
4. x= -0.6000000000000001  
5. x= -0.5000000000000001  
6. x= -0.40000000000000013  
7. x= -0.30000000000000016  
8. x= -0.20000000000000015  
9. x= -0.10000000000000014  
10. x= -1.3877787807814457E-16  
11. x= 0.09999999999999987  
12. x= 0.19999999999999987  
13. …
Run Code Online (Sandbox Code Playgroud)

java double

7
推荐指数
1
解决办法
218
查看次数

Java:使用双精度不准确

可能重复:在Java程序中使用Java中的
双精度保留精度
奇怪的浮点行为

我正在制作直方图课程,我遇到了一个奇怪的问题.

以下是该类的基础知识,有更多方法,但它们与问题无关.

private int[] counters;
private int numCounters;
private double min, max, width;

public Histogram(double botRange, double topRange, int numCounters) {
    counters = new int[numCounters];
    this.numCounters = numCounters;
    min = botRange;
    max = topRange;
    width = (max - min) / (double) numCounters;
}

public void plotFrequency() {
    for (int i = 0; i < counters.length; i++) {
        writeLimit(i * width, (i + 1) * width);
        System.out.println(counters[i]);
    }
}

private void writeLimit(double start, double end) {
    System.out.print(start …
Run Code Online (Sandbox Code Playgroud)

java floating-point double

5
推荐指数
2
解决办法
6323
查看次数

我尝试创建值数组时出现截断错误

我想创建一个间隔为0.2的值数组我使用了代码:

public class TrialCode {

public static void main(String[] args) {

    float a = -1.0f, b = 0.2f;

    for (int i = 0; i <10; i++) {
        a = a + b;
        System.out.println(a);

    }

}

}
Run Code Online (Sandbox Code Playgroud)

现在我得到的输出是:

-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994
Run Code Online (Sandbox Code Playgroud)

而我想要的输出是

-0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0
Run Code Online (Sandbox Code Playgroud)

我该怎么办 ?

java

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

Flash添加错误

在Flash中创建一个新的AS3文档,粘贴以下代码并运行它:

var a:Number=0;
trace(a)  //  0
a+=0.3;
trace(a)  //  0.3
a+=0.3;
trace(a)  //  0.6
a+=0.3;

trace(a)  //  0.8999999999999999
a+=0.3;
trace(a)  //  1.2
a+=0.3;
trace(a)  //  1.5
a+=0.3;
trace(a)  //  1.8
a+=0.3;
trace(a)  //  2.1
a+=0.3;
          //  ^ This is the output. Notice the inaccuracy starting from 0.9 / 0.89
Run Code Online (Sandbox Code Playgroud)

为什么错误?我只是做一个普通的高分辨率加法.

任何解决方法?

math flash floating-point actionscript-3

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

Java中的浮点怪异现象

可能重复:
Java程序中奇怪的浮点行为

我在Java中遇到了这种奇怪的现象。在Java程序中尝试以下语句:

System.out.print(4.0-3.1);
Run Code Online (Sandbox Code Playgroud)

输出将是 0.8999999

为什么会这样?以及如何更改?

java floating-accuracy

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

Java双打不擅长数学

我目前正在用java编写计算器程序.这是我的第一个java程序,我习惯于c ++.

我注意到java中的双打完全不像c ++中的双打.在java和c ++
4.1*3
中尝试这个/ .1

它应该是
12.3然后123,并且c ++给出了这个结果但java给出了
12.299999999999999和122.99999999999999

我怎么能像在c ++中使用双打一样进行数学运算,我知道你在程序中使用12.299999999999999的任何东西都不会与12.3相比没有区别,但是当用户正在阅读数字时,这非常难看.我已经查看了BigDecimal类,但我无法对该类执行trig和logarithms等等

c++ java math calculator double-precision

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