Created
August 26, 2024 12:21
-
-
Save eggfly/f96690241dd997e41b4962a79f75111f to your computer and use it in GitHub Desktop.
Interesting Pi Leibniz Algorithm in Kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.test | |
import java.math.BigDecimal | |
import java.math.MathContext | |
import java.math.RoundingMode | |
import java.text.NumberFormat | |
fun divideBigDecimal(dividend: BigDecimal, divisor: BigDecimal, scale: Int): BigDecimal { | |
return dividend.divide(divisor, scale, RoundingMode.HALF_UP) | |
} | |
fun calculatePiLeibniz(iterations: Long, scale: Int): BigDecimal { | |
var pi = BigDecimal.ZERO | |
val one = BigDecimal.ONE | |
val four = BigDecimal(4) | |
val mc = MathContext(scale, RoundingMode.HALF_UP) | |
for (i in 0 until iterations) { | |
val denominator = BigDecimal(2 * i + 1) | |
val term = four.divide(denominator, mc) | |
if (i % 2 == 0L) { | |
pi = pi.add(term, mc) | |
} else { | |
pi = pi.subtract(term, mc) | |
} | |
} | |
println("Calculated π: $pi with $iterations iterations") | |
val nf = NumberFormat.getInstance(); | |
nf.isGroupingUsed = false | |
nf.maximumFractionDigits = scale | |
nf.maximumFractionDigits = scale | |
println("* real π - π: ${nf.format(piReal - pi)} with $iterations iterations") | |
return pi | |
} | |
val piReal = | |
BigDecimal("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679") | |
fun main() { | |
val scale = 200 // 小数位数 | |
// val iterations = // 迭代次数 | |
println("-- Precise π: $piReal") | |
calculatePiLeibniz(100000, scale) | |
calculatePiLeibniz(1000000, scale) | |
calculatePiLeibniz(10000000, scale) | |
calculatePiLeibniz(100000000, scale) | |
calculatePiLeibniz(1000000000, scale) | |
calculatePiLeibniz(10000000000, scale) | |
calculatePiLeibniz(100000000000, scale) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment