diff --git a/wip/nim/samples b/wip/nim/samples index 847b8332..724e5cc0 100755 Binary files a/wip/nim/samples and b/wip/nim/samples differ diff --git a/wip/nim/samples.nim b/wip/nim/samples.nim index 16f1f0e3..68aba385 100644 --- a/wip/nim/samples.nim +++ b/wip/nim/samples.nim @@ -7,20 +7,18 @@ proc pow2(x:float, y:int): float = proc sine(x: float): float = let n = 100 - var result = 0.0 + var acc = 0.0 for i in 0..n: let k = 2*n + 1 - let taylor = pow2(x, k)/ float(k) - result = result + taylor - return result + let taylor = pow2(x, k) / float(k) + acc = acc + taylor + return acc proc log(x: float): float = var y = x - 1 - var result = 0.0 let n = 1000 for i in 1..n: - let taylor = pow2(-1, n+1) * pow2(y, n) / float(n) - let n = 1000 + let taylor = pow2(-1.0, n+1) * pow2(y, n) / float(n) result = result + taylor return result @@ -31,4 +29,4 @@ proc normal(): float = # see https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform#Basic_form -echo log(1.0) +echo sine(0.1) diff --git a/wip/nim/sums/makefile b/wip/nim/sums/makefile new file mode 100644 index 00000000..b9b762be --- /dev/null +++ b/wip/nim/sums/makefile @@ -0,0 +1,2 @@ +build: sums.nim + nim c sums.nim diff --git a/wip/nim/sums/sums b/wip/nim/sums/sums new file mode 100755 index 00000000..f6c1c450 Binary files /dev/null and b/wip/nim/sums/sums differ diff --git a/wip/nim/sums/sums.nim b/wip/nim/sums/sums.nim new file mode 100644 index 00000000..a49fe312 --- /dev/null +++ b/wip/nim/sums/sums.nim @@ -0,0 +1,23 @@ +import std/math +# randomize() + +proc factorial(n: int): int = + if n == 0 or n < 0: + return 1 + else: + return n * factorial(n - 1) + +proc sine(x: float): float = + let n = 8 + # ^ Taylor will converge really quickly + # notice that the factorial of 17 is + # already pretty gigantic + var acc = 0.0 + for i in 0..n: + var k = 2*i + 1 + var taylor = pow(-1, i.float) * pow(x, k.float) / factorial(k).float + acc = acc + taylor + return acc + +# echo factorial(17) +echo sine(1.0)