05-20-2003, 06:36 AM
There ain't much interest in this, so if I don't recieve another entry within 3 days of now then toonski wins. But its easy to improve what he has done, someone else challenge him.
DECLARE FUNCTION GetSin# (a#) '*** CHALLENGE ENTRY ***
DECLARE FUNCTION fact# (count&) '*** NEEDED ROUTINE ***
CLS
INPUT "Enter angle in degrees (0 to 360), you wish to calculate sine for: ", a#
si# = GetSin#(a#)
PRINT "QB VALUE= "; SIN(a#) '*** SHOW QB ANSWER ***
PRINT "MY VALUE= "; si# '*** SHOW MY FUNCTION'S ANSWER ***
WHILE INKEY$ <> "": WEND '*** PAUSE ***
WHILE INKEY$ = "":WEND
SYSTEM
FUNCTION fact# (count&) '*** CALCULATE (2n-1)! ***
f# = 1
FOR x& = count& TO 2 STEP -1
f# = f# * x&
NEXT x&
fact# = f#
END FUNCTION
FUNCTION GetSin# (a#)
pi# = 3.141592653589793#
a# = a# * (pi# / 180) '*** CONVERT DEGREES TO RADIANS ***
DO
n& = n& + 1
p1# = (-1) ^ (n& - 1) '*** DETERMINE + OR - ***
p2# = a# ^ (2 * (n&) - 1) '*** DETERMINE NUMERATOR ***
p3# = fact#((2 * (n&)) - 1) '*** DETERMINE DENOMINATOR ***
s# = s# + p1# * (p2# / p3#) '*** ADJUST SUM ***
LOOP UNTIL n& > 70
'*** THE HIGHER n& GOES, THE MORE ACCURATE MY FUNCTION IS***
'*** HOWEVER, HIGHER n& WILL OVERFLOW THE FACTORIAL :( ***
GetSin = s#
END FUNCTION