我正在研究这里的https://www.hackerrank.com/challenges/leibniz所示的莱布尼茨问题。它计算 1-1/3+1/5-1/7+1/9+... 序列中的每个元素都可以定义为 a(i)=(-1)^i/(2*i+1 ) 从 0 开始。
问题要求从第一项到第n项相加并输出结果。我的程序通过了基本的测试用例。但在其他情况下它会失败。
我想我的程序错误是由于数字足够大时的精度。
任何人都可以提供一种方法来提高结果的精度吗?
double leibnitz(int n) {
double res = 0.0;
for (int i = 1; i <= n; i++) {
res += 1.0 / (2 * i - 1) * (i % 2 == 1 ? 1.0 : -1.0);
}
return res;
}