User:Spekkio: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 34: Line 34:


<lang lisp>
<lang lisp>
(defun pie() 31415926535897932385/10000000000000000000)

(defun factorial (n)
(defun factorial (n)
(if (= n 0)
(if (= n 0)
Line 49: Line 51:
(* (binom alpha (- n 1)) (/ (+ (- alpha n) 1) n))))
(* (binom alpha (- n 1)) (/ (+ (- alpha n) 1) n))))


(defun pow (a b n)
(defun power (a b n)
(if (= n 0)
(if (= n 0)
1
1
(+ (* (binom b n) (powint (- a 1) n)) (pow a b (- n 1)))))
(+ (* (binom b n) (powint (- a 1) n)) (power a b (- n 1)))))

(defun powertest(a b n)
(if
(= (* (power a b (+ 10 n)) 1.0) (* (power a b n) 1.0))
(power a b (+ 10 n))
(powertest a b (+ 10 n))
)
)

(defun pow (a b) (powertest a b 1))


(defun logS(x n) (if (= n 0) (* 2 x) (+ (* 2 (/ (powint x (+ (* 2 n) 1)) (+ (* 2 n) 1))) (logS x (- n 1)) ) ))
(defun logS(x n) (if (= n 0) (* 2 x) (+ (* 2 (/ (powint x (+ (* 2 n) 1)) (+ (* 2 n) 1))) (logS x (- n 1)) ) ))
Line 60: Line 72:
(defun expon(x n) (if (= n 0) 1 (+ (/ (powint x n) (factorial n)) (expon x (- n 1)))))
(defun expon(x n) (if (= n 0) 1 (+ (/ (powint x n) (factorial n)) (expon x (- n 1)))))


(defun sqrtn(x n) (expon (* 1/2 (loge x n)) n))
(defun squaren(x n) (expon (* 1/2 (loge x n)) n))


(defun pown(x a n) (expon (* a (loge x n)) n))
(defun squarentest(a n)
(if
(= (* (squaren a (+ 10 n)) 1.0) (* (squaren a n) 1.0))
(squaren a (+ 10 n))
(squarentest a (+ 10 n))
)
)

(defun sqrtn (a) (squarentest a 1))

(defun powern(x a n) (expon (* a (loge x n)) n))

(defun powerntest(a b n)
(if
(= (* (powern a b (+ 10 n)) 1.0) (* (powern a b n) 1.0))
(powern a b (+ 10 n))
(powerntest a b (+ 10 n))
)
)

(defun pown (a b) (powerntest a b 1))


(defun sine(x n)
(defun sine(x n)
Line 71: Line 103:
(defun sinetest(x n)
(defun sinetest(x n)
(if
(if
(= (* (sine x (1+ n)) 1.0) (* (sine x n) 1.0))
(= (* (sine x (+ 10 n)) 1.0) (* (sine x n) 1.0))
(sine x n)
(sine x (+ 10 n))
(sinetest x (1+ n))
(sinetest x (+ 10 n))
)
)
)
)
Line 91: Line 123:
(defun asinetest(x n)
(defun asinetest(x n)
(if
(if
(= (* (asine x (1+ n)) 1.0) (* (asine x n) 1.0))
(= (* (asine x (+ 10 n)) 1.0) (* (asine x n) 1.0))
(asine x n)
(asine x (+ 10 n))
(asinetest x (1+ n))
(asinetest x (+ 10 n))
)
)
)
)


(defun myasin (x) (asinetest x 1))
(defun myasin (x)
(if (< x 1)
(defun fibcalc (n p)
(let ((sqrtFive (sqrtn 5 p)))
(if (> x -1)
(asinetest x 1)
(/ (- (powint (* 1/2 (+ 1 (sqrtFive))) n) (powint (* 1/2 (- 1 (sqrtFive))) n)) (sqrtFive))))
(/ (pie) -2)
)
(/ (pie) 2)
)
)

(defun fibcalc (n)
(/ (- (powint (* 1/2 (+ 1 (sqrtn 5))) n) (powint (* 1/2 (- 1 (sqrtn 5))) n)) (sqrtn 5)))


(defun fibrec (n)
(defun fibrec (n)
Line 108: Line 148:
1
1
(+ (fibrec (- n 1)) (fibrec (- n 2))))))
(+ (fibrec (- n 1)) (fibrec (- n 2))))))

</lang>
</lang>


test:
test:
[3]> (asin 1/10)
[14]> (* (myasin 9/100) 1.0)
0.100167416
0.09012195
[3]> (* (myasin 1/10) 1.0)
[14]> (sin 9/100)
0.10016742
0.08987855



Compare with Mathematica:
Compare with Mathematica:
In: N[ArcSin[1/10], 10]
In[14]:= N[ArcSin[9/100], 8]
Out: 0.1001674212
Out[14]= 0.090121945


(myasin) seems to be more accurate, though trying to compute (myasin 1) is very slow.
(myasin) seems to be more accurate, though trying to compute (myasin 9999999/10000000) is very slow.


Test 2:
Test 2:
[4]> (* (myasin (mysin 1)) 1.0)
[4]> (* (myasin (mysin 1)) 1.0)
1.0
0.9999999
[4]> (asin (sin 1))
[4]> (asin (sin 1))
1.0
1.0