#!/usr/koeki/bin/ruby require 'mathn' def fac(m) if m == 1 1 else m * fac(m-1) end end def sin_taylor1(x, m) x end def sin_taylor2(x, m) x - 1/fac(m) * x ** m end def sin_taylor3(x, m) x - 1/fac(m-2) * x ** (m-2) + 1/fac(m) * x ** m end def sin_taylor4(x, m) x - 1/fac(m-4) * x ** (m-4) + 1/fac(m-2) * x ** (m-2) - 1/fac(m) * x ** m end n = 5 printf("%-2s %10s %10s %8s %8s %8s %8s %8s %8s %8s", "¡ë","Àµ¸¹ÃÍ", "Ÿ³«1¼¡","Ÿ³«2¼¡","Ÿ³«3¼¡","Ÿ³«4¼¡", "º¹Ê¬¤Î2¾è","º¹Ê¬¤Î2¾è", "º¹Ê¬¤Î2¾è", "º¹Ê¬¤Î2¾è") for i in 0..8 puts "" for theta in i * 10 + 0..i * 10 + 9 rad = Math::PI * theta/180 sine = Math.sin(rad) taylor1 = sin_taylor1(rad,1) taylor2 = sin_taylor2(rad,3) taylor3 = sin_taylor3(rad,5) taylor4 = sin_taylor4(rad,7) printf("%2d | %8.6f | %8.6f %8.6f %8.6f %8.6f | %8.1e %8.1e %8.1e %8.1e\n", theta, sine, taylor1, taylor2, taylor3, taylor4, (sine-taylor1) ** 2, (sine-taylor2) ** 2, (sine-taylor3) ** 2, (sine-taylor4) ** 2) end end