gpt4 book ai didi

java - 使用按位运算来优化 Java Math

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:54 24 4
gpt4 key购买 nike

在我的 Java 类(class)中,我必须使用 Bailey–Borwein–Plouffe 公式计算 Pi 的值,精确到小数点后 15 位。在公式中,我需要计算16的n次方(1到50 000 000之间的整数);

这是我正在使用的公式

The Bailey–Borwein–Plouffe formula

这是我计算的代码:

double value = 0.0;

//Calculates and increments value by using the BBP formula
for(int i = 0; i < iterations; i++) {
if(i == 0) {
value += (1 / 1) * (
(4.0 / ((8 * i) + 1)) -
(2.0 / ((8 * i) + 4)) -
(1.0 / ((8 * i) + 5)) -
(1.0 / ((8 * i) + 6)) );
} else {
value += (1.0 / (2L<<(i<<2L))) * (
(4.0 / ((8 * i) + 1)) -
(2.0 / ((8 * i) + 4)) -
(1.0 / ((8 * i) + 5)) -
(1.0 / ((8 * i) + 6)) );
}
}

问题是,我正在使用按位运算(左移 <<)来优化代码,因为如果我们使程序尽可能快,我们将获得加分。出于某种原因,无论我尝试什么,从 Pi 计算出的结果数字都太大而无法使用。我能够得到数字 1 到 1.5324955e+54。之后,数字溢出,我得到 1 或 0。我试图得到 3.14159 等,但由于这个数据溢出,我得到 3.1382357295632852。

谁能帮我解决这个问题?还是根本不值得使用按位运算来计算幂?

最佳答案

可表示为大于零的 double 值的最小值是 2-2048。对于上面的每个项 (2048/4),该公式将达到零,即 512。上升到 50,000,000 是 49,999,488 太远了。

关于java - 使用按位运算来优化 Java Math,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42978452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com