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 }