まさぽん #6002(2008/03/12 06:06 GMT) [ Arc ] Rating0/0=0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
(= cube-list (map [expt _ 3] (range 1 10))) (= acc 0.000000000001) (def search-real (cr of rn) (let gosa (- rn (expt cr 3)) (if (< (abs gosa) acc) cr (if (< 0 gosa) (search-real (+ cr of) (/ of 2) rn) (search-real (- cr of) (/ of 2) rn))))) (def search-cube-root (rn) (if (is (type rn) 'int) (let i (trunc rn) (if (mem i cube-list) (+ (pos i cube-list) 1) (search-real (+ (pos i (sort < (cons i cube-list))) 0.5) 0.25 rn))) (search-real (+ (pos rn (sort < (cons rn cube-list))) 0.5) 0.25 rn)))
Rating0/0=0.00-0+
1 reply [ reply ]
まさぽん #6003(2008/03/12 06:43 GMT) Rating0/0=0.00
指数関数使用禁止なのを忘れとった。 1 行目は (= cube-list (map [* _ _ _] (range 1 10))) 5 行目は (let gosa (- rn (* cr cr cr)) ですね。
[ reply ]
まさぽん
#6002()
[
Arc
]
Rating0/0=0.00
三乗根がピッタリ整数の場合は、整数で答えを出すようにしたので、ちょっと長くなりました。
実行例:
arc> (search-cube-root 10.0)
2.1544346900318487
arc> (expt (search-cube-root 10.0) 3)
9.999999999999513
arc> (search-cube-root 100.0)
4.641588833612786
arc> (expt (search-cube-root 100.0) 3)
100.00000000000048
arc> (search-cube-root 125.0)
5
(= cube-list (map [expt _ 3] (range 1 10))) (= acc 0.000000000001) (def search-real (cr of rn) (let gosa (- rn (expt cr 3)) (if (< (abs gosa) acc) cr (if (< 0 gosa) (search-real (+ cr of) (/ of 2) rn) (search-real (- cr of) (/ of 2) rn))))) (def search-cube-root (rn) (if (is (type rn) 'int) (let i (trunc rn) (if (mem i cube-list) (+ (pos i cube-list) 1) (search-real (+ (pos i (sort < (cons i cube-list))) 0.5) 0.25 rn))) (search-real (+ (pos rn (sort < (cons rn cube-list))) 0.5) 0.25 rn)))Rating0/0=0.00-0+
1 reply [ reply ]