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

在.NET中双倍乘法?

如果我在C#中执行以下表达式:

double i = 10*0.69;
Run Code Online (Sandbox Code Playgroud)

i是:6.8999999999999995.为什么?

我理解像1/3这样的数字很难用二进制来表示,因为它有无限的重复小数位,但这不是0.69的情况.并且0.69可以很容易地用二进制表示,一个二进制数表示69,另一个表示小数位的位置.

我该如何解决这个问题?使用decimal类型?

.net c# math

53
推荐指数
6
解决办法
2万
查看次数

为什么我看到一个双变量初始化为某个值,如21.4为21.399999618530273?

double r = 11.631;
double theta = 21.4;
Run Code Online (Sandbox Code Playgroud)

在调试器中,这些显示为11.63100000000000021.399999618530273.

我怎么能避免这个?

floating-point precision

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

浮点算法不能产生精确的结果

我需要在Java中进行一些浮点运算,如下面的代码所示:

public class TestMain {
    private static Map<Integer, Double> ccc = new HashMap<Integer, Double>() {
      { put(1, 0.01); put(2, 0.02); put(3, 0.05); put(4, 0.1); put(6, 0.2);
        put(10, 0.5); put(20, 1.0); put(30, 2.0); put(50, 5.0); put(100, 10.0);
      }
    };

    Double increment(Double i, boolean up) {
        Double inc = null;

        while (inc == null) {
            inc = ccc.get(i.intValue());

            if (up)
                --i;
            else
                ++i;
        }
        return inc;
    }

    public static void main(String[] args) {
        TestMain tt = new TestMain();

        for (double i = …
Run Code Online (Sandbox Code Playgroud)

java floating-point

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

为什么浮点上的简单数学运算会在VB.Net和Python中返回意外(不准确)?

x = 4.2 - 0.1  
Run Code Online (Sandbox Code Playgroud)

vb.net给出了4.1000000000000005
python给出的4.1000000000000005

Excel给出了4.1
calc calc给出4.1

这种情况发生的原因是什么?

python vb.net floating-point

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