使用 Streams 实现数学函数

Streams,尤其是 IntStreams,是实现求和项(Σ)的一种优雅方式。Stream 的范围可以用作求和的边界。

例如,Madhava 对 Pi 的近似由公式给出(来源: 维基百科 ): StackOverflow 文档

这可以用任意精度计算。例如,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 无法区分的结果。