java - 为什么 Math.Pow(x,y) 使用 double 而不是 long?
问题描述
我们需要使用long和Long.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
...
解决方案
当您需要做的只是每次乘以 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;
}
}
这也适用于长负数(打印为无符号),例如当结果太大而无法放入有符号长时,因为乘法按预期工作,不像从双精度数转换。
推荐阅读
- angular - Angular:在类中使用服务
- python - 如何添加同一字段的不同值
- java - 使用异步查看意外行为并重试 Spring Boot
- python - 压缩 for 循环表达式 (Python)
- unity3d - Unity:在输入管理器中定义 UI 按钮
- android-studio - Android Studio 超时等待锁定文件哈希缓存 ==> 现有解决方案不起作用
- gradle - Kotlin 多平台构建脚本问题
- python - 如何使用 Python 将文本文件转换为 NPZ 文件
- php - 数据库播种机没有在 Laravel 中插入正确的数据
- c++ - 接收不同 STL 容器的通用函数 [C++]