diff options
author | Mango0x45 <thomasvoss@live.com> | 2021-01-03 15:34:23 +0000 |
---|---|---|
committer | Mango0x45 <thomasvoss@live.com> | 2021-01-03 15:34:23 +0000 |
commit | 010fd353d4c57bad9c6f47cac881d725a006423e (patch) | |
tree | 669b630c2f4b5f83237c80ff58c86e54b03420ee /bc_funcs | |
parent | 24d974befc8307138384c27d604c8b220201d83a (diff) | |
download | steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar.gz steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar.bz2 steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar.lz steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar.xz steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.tar.zst steve-bot-010fd353d4c57bad9c6f47cac881d725a006423e.zip |
Try to make math work with BC functions
Diffstat (limited to 'bc_funcs')
-rw-r--r-- | bc_funcs/trig.bc | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/bc_funcs/trig.bc b/bc_funcs/trig.bc new file mode 100644 index 0000000..01b7839 --- /dev/null +++ b/bc_funcs/trig.bc @@ -0,0 +1,98 @@ +define sin(x) { + auto b, s, r, a, q, i + + if (x < 0) + return (-sin(-x)) + + b = ibase + ibase = A + s = scale + scale = 1.1 * s + 2 + a = atan(1) + scale = 0 + q = (x / a + 2) / 4 + x -= 4 * q * a + + if (q % 2) + x = -x + + scale = s + 2 + r = a = x + q = -x * x + + for (i = 3; a; i += 2) { + a *= q / (i * (i - 1)) + r += a + } + + scale = s + ibase = b + return (r / 1) +} + +define cos(x){ + auto b, s + b = ibase + ibase = A + s = scale + scale *= 1.2 + x = sin(2 * atan(1) + x) + scale = s + ibase = b + + return (x / 1) +} + +define atan(x){ + auto b, s, r, n, a, m, t, f, i, u + b = ibase + ibase = A + n = 1 + + if (x < 0) { + n = -1 + x = -x + } + + if (scale < 65) { + if (x == 1) { + r = .7853981633974483096156608458198757210492923498437764552437361480/n + ibase = b + return (r) + } + + if (x == .2) { + r = .1973955598498807583700497651947902934475851037878521015176889402/n + ibase = b + return (r) + } + } + + s = scale + + if (x > .2) { + scale += 5 + a = atan(.2) + } + + scale = s + 3 + + while (x > .2) { + m++ + x = (x - .2) / (1 + .2 * x) + } + + r = u = x + f = -x * x + t = 1 + + for(i = 3; t; i += 2) { + u *= f + t = u / i + r += t + } + + scale = s + ibase = b + return ((m * a + r) / n) +}
\ No newline at end of file |