From 6e22e78d4fd70b9e38542d7cd8c2ba931a571801 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sat, 20 May 2023 22:38:38 -0400 Subject: [PATCH] add cool implementation of the logarithm --- wip/nim/samples | Bin 122128 -> 126344 bytes wip/nim/samples.nim | 47 +++++++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/wip/nim/samples b/wip/nim/samples index bf7b6bf9296b9c13130179e9c98a92ce34753dd1..5c675c4de3db96a6d068553b07862025580d7025 100755 GIT binary patch delta 36144 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 delta 34398 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

0S)UMPFg*n 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 z DRVmvg diff --git a/wip/nim/samples.nim b/wip/nim/samples.nim index 1fc5d3b3..0187f154 100644 --- a/wip/nim/samples.nim +++ b/wip/nim/samples.nim @@ -22,23 +22,10 @@ proc sine(x: float): float = acc = acc + taylor return acc -# Helpers for calculating the log function - -## Arithmetic-geomtric mean -proc ag(x: float, y: float): float = - let n = 100 - var a = (x + y)/2.0 - var b = sqrt(x * y) - for i in 0..n: - let temp = a - a = (a+b)/2.0 - b = sqrt(b*temp) - return a - -## Find m such that x * 2^m > 2^100 +## Log function +## Old implementation using Taylor expansion proc log_slow(x: float): float = - # See: var y = x - 1 let n = 100000000 var acc = 0.0 @@ -47,14 +34,42 @@ proc log_slow(x: float): float = acc = acc + taylor return acc +## New implementation +## + +## Arithmetic-geomtric mean +proc ag(x: float, y: float): float = + let n = 128 # just some high number + var a = (x + y)/2.0 + var b = sqrt(x * y) + for i in 0..n: + let temp = a + a = (a+b)/2.0 + b = sqrt(b*temp) + return a + +## Find m such that x * 2^m > 2^precision/2 +proc find_m(x:float): float = + var m = 0.0; + let precision = 64 # bits + let c = pow(2.0, precision.float / 2.0) + while x * pow(2.0, m) < c: + m = m + 1 + return m + proc log(x: float): float = - return 1 + let m = find_m(x) + let s = x * pow(2.0, m) + let ln2 = 0.6931471805599453 + return ( PI / (2.0 * ag(1, 4.0/s)) ) - m * ln2 ## Test these functions echo factorial(5) echo sine(1.0) echo log(1.0) echo log(2.0) +echo log(3.0) +echo pow(2.0, 32.float) ## Distribution functions proc normal(): float =