diff --git a/balloon/lib/math.nas b/balloon/lib/math.nas index e8092d4..77a3b99 100644 --- a/balloon/lib/math.nas +++ b/balloon/lib/math.nas @@ -1,4 +1,6 @@ var pi=3.14159265358979; +var ln_2=0.69314718055994530942; +var ln_10=2.30258509299404568402; var abs=func(__x) { @@ -96,4 +98,47 @@ var cos=func(__x) var tan=func(__x) { return sin(__x)/cos(__x); +}; + +var sqrt=func(__x) +{ + if(__x>100){return 10*sqrt(__x/100);} + var t=__x/8+0.5+2*__x/(4+__x); + var c=10; + while(c>0) + { + t=(t+__x/t)/2; + c-=1; + } + return t; +}; + +var __balloon_lib_asin_asr=func(__x,__y) +{ + var __mid=(__x+__y)/2; + if(abs(__y-__x)<=0.01){return (1/sqrt(1-__x*__x)+4/sqrt(1-__mid*__mid)+1/sqrt(1-__y*__y))*(__y-__x)/6;} + return __balloon_lib_asin_asr(__x,__mid)+__balloon_lib_asin_asr(__mid,__y); +}; + +var asin=func(__x) +{ + if(abs(__x)>1){return -1;} + var fl=1; + if(__x<0){fl=-fl;__x=-__x;} + if(abs(__x-1)<0.001){return pi/2;} + return fl*__balloon_lib_asin_asr(0,__x); +}; + +var acos=func(__x) +{ + if(abs(__x)>1) {return -1;} + return pi/2-asin(__x); +}; + +var atan=func(__x) +{ + if(__x<0){return -atan(-__x);} + if(__x>1){return pi/2-atan(1/__x);} + if(__x>0.001){return 2*atan((sqrt(1+__x*__x)-1)/__x);} + return __x*(1-__x*__x*(1/3+__x*__x*(1/5-__x*__x*(1/7+__x*__x/9)))); }; \ No newline at end of file