使用 Streams 实现数学函数
Stream
s,尤其是 IntStream
s,是实现求和项(Σ)的一种优雅方式。Stream
的范围可以用作求和的边界。
例如,Madhava 对 Pi 的近似由公式给出(来源: 维基百科 ):
这可以用任意精度计算。例如,101 个术语:
double pi = Math.sqrt(12) *
IntStream.rangeClosed(0, 100)
.mapToDouble(k -> Math.pow(-3, -1 * k) / (2 * k + 1))
.sum();
注意: 使用 double
的精度,选择 29 的上限足以得到与 Math.Pi
无法区分的结果。