相关疑难解决方法(0)

如何避免Java中的浮点数或双精度浮点精度错误?

我有一个非常恼人的问题,在Java中有很多浮点数或双打数.基本上这个想法是,如果我执行:

for ( float value = 0.0f; value < 1.0f; value += 0.1f )
    System.out.println( value );
Run Code Online (Sandbox Code Playgroud)

我得到的是:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Run Code Online (Sandbox Code Playgroud)

我明白浮动精度误差的积累,但是,如何摆脱这个?我尝试使用双打错误的一半,但结果仍然相同.

有任何想法吗?

java sum floating-accuracy

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

如何稳健地计算平均值(平均值)?

如果我们天真地计算平均值:

std::vector<double> values;
double sum = std::accumulate(begin(values), end(values), 0.0);
double mean = sum / values.size();
Run Code Online (Sandbox Code Playgroud)

并且values.size()很大,我们可能会得到不准确的结果,因为浮点数在较高范围内的分辨率较低.或者更糟糕的是,如果我理解正确,我们可以获得无限的结果.

当我们有偶数个值时,我们可以计算前半部分的平均值,然后计算第二个的平均值,并找到这两个均值的平均值.

这似乎不是一个新问题,但我很难找到资源.我觉得有更复杂的技术权衡

  • 稳健性
  • 计算复杂性
  • 难以实施

我想知道是否有人将它们总结到某个地方甚至更好,如果它们在某些图书馆中可用的话.

c++ algorithm floating-point

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

大浮点和的精度

我试图总结一个正向递减浮点的排序数组.我已经看到,总结它们的最佳方法是开始将数字从最低到最高加起来.我写这个代码的例子是,但是,从最高数字开始的总和更精确.为什么?(当然,总和1/k ^ 2应为f = 1.644934066848226).

#include <stdio.h>
#include <math.h>

int main() {

    double sum = 0;
    int n;
    int e = 0;
    double r = 0;
    double f = 1.644934066848226;
    double x, y, c, b;
    double sum2 = 0;

    printf("introduce n\n");
    scanf("%d", &n);

    double terms[n];

    y = 1;

    while (e < n) {
        x = 1 / ((y) * (y));
        terms[e] = x;
        sum = sum + x;
        y++;
        e++;
    }

    y = y - 1;
    e = e - …
Run Code Online (Sandbox Code Playgroud)

c floating-point precision numerical-methods

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

java浮点精度(0.1 + 0.2 + ... + 1.00 ..或.. 1.00 + 0.99 + 0.98 + ... + 0.1)

我正在读考试,我解决了这个问题

添加0.1 + 0.2 + ... + 1.00 ..或1.00 + 0.99 + 0.98 + ... + 0.1

在哪个位置添加数字以获得更高的Java准确性?

java floating-point floating-accuracy

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