From 91b4d2e34e27f4d3c5c7efc5490e8ab3540be138 Mon Sep 17 00:00:00 2001 From: Mango0x45 Date: Mon, 18 Jan 2021 22:49:09 +0100 Subject: Merge BC files into one --- bc_funcs/lib.bc | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ bc_funcs/std.bc | 30 ------------- bc_funcs/trig.bc | 98 ------------------------------------------ 3 files changed, 129 insertions(+), 128 deletions(-) create mode 100644 bc_funcs/lib.bc delete mode 100644 bc_funcs/std.bc delete mode 100644 bc_funcs/trig.bc diff --git a/bc_funcs/lib.bc b/bc_funcs/lib.bc new file mode 100644 index 0000000..d413763 --- /dev/null +++ b/bc_funcs/lib.bc @@ -0,0 +1,129 @@ +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 += 1 + 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) +} + +define abs(x) { + if (x < 0) + x *= -1 + return x +} + +define fact(x) { + auto r, s + + if (x < 0) { + print "Error: Negative factorial\n" + return 0 + } + + /* x % 1 requires scale set to 0 */ + s = scale + scale = 0 + if (x % 1 != 0) { + print "Error: Non-integer factorial\n" + scale = s + return 0 + } + + r = 1 + for (i = 2; i <= x; i++) + r *= i + + scale = s + return r +} diff --git a/bc_funcs/std.bc b/bc_funcs/std.bc deleted file mode 100644 index e90231e..0000000 --- a/bc_funcs/std.bc +++ /dev/null @@ -1,30 +0,0 @@ -define abs(x) { - if (x < 0) - x *= -1 - return x -} - -define fact(x) { - auto r, s - - if (x < 0) { - print "Error: Negative factorial\n" - return 0 - } - - /* x % 1 requires scale set to 0 */ - s = scale - scale = 0 - if (x % 1 != 0) { - print "Error: Non-integer factorial\n" - scale = s - return 0 - } - - r = 1 - for (i = 2; i <= x; i++) - r *= i - - scale = s - return r -} diff --git a/bc_funcs/trig.bc b/bc_funcs/trig.bc deleted file mode 100644 index 9a4fcb3..0000000 --- a/bc_funcs/trig.bc +++ /dev/null @@ -1,98 +0,0 @@ -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 += 1 - 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) -} -- cgit v1.2.3