首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Math.Pow(x,y)使用双倍而不是长?

为什么Math.Pow(x,y)使用双倍而不是长?
EN

Stack Overflow用户
提问于 2020-12-20 14:08:47
回答 1查看 108关注 0票数 0

我们需要使用long和Long.toUnsignedString()作为水稻的类型,但是Math.Power正在将其更改为double

代码语言:javascript
复制
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;
        }
    }
}

我测试了很多东西,但都没有用。产出如下:

代码语言:javascript
复制
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

包括:

代码语言:javascript
复制
Feld: 1, Reiskörner: 1
Feld: 2, Reiskörner: 2
...
EN

回答 1

Stack Overflow用户

发布于 2020-12-20 14:41:57

在循环中多次调用Math.pow()是效率低下的,而您只需要每次乘以两次:

代码语言:javascript
复制
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;
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65380761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档