首页 > 解决方案 > 为什么 Math.Pow(x,y) 使用 double 而不是 long?

问题描述

我们需要使用longLong.toUnsignedString()作为大米的类型,但Math.Power将其更改为double

package com.company;

public class Main {

    public static void main(String[] args) {
        int rk = 0;

        for (byte feld = 1; feld < 65; feld++) {
            System.out.println("Feld: " + feld + ", Reiskörner: " + Math.pow(2, rk));
            rk = rk+1;
        }
    }
}

我测试了很多东西,但没有任何效果。输出是:

Feld: 1, Reiskörner: 1.0
Feld: 2, Reiskörner: 2.0
Feld: 3, Reiskörner: 4.0
...
Feld: 63, Reiskörner: 4.6116860184273879E18
Feld: 64, Reiskörner: 9.223372036854776E18

安装:

Feld: 1, Reiskörner: 1
Feld: 2, Reiskörner: 2
...

标签: javapow

解决方案


当您需要做的只是每次乘以 2 时,在循环中多次调用 Math.pow() 是低效的:

public static void main(String[] args) {
    long rk = 1;

    for (byte feld = 1; feld < 65; feld++) {
        System.out.println("Feld: " + feld + ", Reiskörner: " + Long.toUnsignedString(rk));
        rk *= 2;
    }
}

这也适用于长负数(打印为无符号),例如当结果太大而无法放入有符号长时,因为乘法按预期工作,不像从双精度数转换。


推荐阅读