作者EdisonX (閉上眼的魚)
看板Programming
標題[其他] 數值分析 - 非整數次方 (幕次)
時間Fri Sep 2 17:59:48 2011
※ [本文轉錄自 Math 看板 #1EOARBpm ]
作者: EdisonX (閉上眼的魚) 看板: Math
標題: [其他] 數值分析 - 非整數次方 (幕次)
時間: Fri Sep 2 17:49:56 2011
大家好,我想知道一些非整數次方的算法,不用計算機,用手算即可,
只考慮實數係即可,可假設容許誤差為 10 ** -3。
我找過一些資料了,目前比較有用的想法,以下面例子帶出 (恕數學不好)。
2.5 ** 3.12
= 2.5 ** (3.0 + 0.12)
= (2.5 ** 3.0) * (2.5 ** 0.12)
= (2.5 ** 3.0) * (2.5 ** (12 / 100) )
= (2.5 ** 3.0) * ( (2.5 ** 12) * ( 2.5 ** 0.01 ) )
這樣是先化成 (整數 + 小數),再將小數化成分數去計算,
但還是卡在 2.5 ** 0.01 (開 100 次根) 該如何算?
若真如此計算,速度略嫌慢,且在小數化為分數再計算時,
又怕誤差更大了。
--- 分隔線 --- 分隔線 ---
其實這是要寫 math.h 裡面的東西, 在完全不調用 math.h 函式下,
是否有什麼演算法可做?謝謝大家。
--
If there is no tomorrow,
I want to see u last time.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
※ 編輯: EdisonX 來自: 180.177.78.41 (09/02 18:03)
1F:→ MOONRAKER:請看NRiC (Numerical Recipes in C)218.160.182.185 09/03 23:16
2F:→ EdisonX:感謝 MOONRAKER 指示提醒。 180.177.78.41 09/03 23:19
3F:→ MOONRAKER:抱歉,他們還是要用math.h X(218.160.182.185 09/03 23:20
4F:→ MOONRAKER:那麼基礎的計算他們沒有自己做 X(218.160.182.185 09/03 23:21
6F:→ EdisonX:嗯嗯,我是很好奇,目前想法卡在 e^x 180.177.78.41 09/03 23:23
7F:→ EdisonX:用taylor series 展開,速度差100倍. 180.177.78.41 09/03 23:23
8F:→ EdisonX:所以想說這部份是不是各家用組語寫的. 180.177.78.41 09/03 23:24
9F:→ EdisonX:再次感謝 M 大提供的資源 :) 180.177.78.41 09/03 23:27
10F:→ MOONRAKER:一定有optimization,而且運用更快的算218.160.182.185 09/04 02:29
11F:→ MOONRAKER:法,不過我也不知道這種東東從哪裡找起218.160.182.185 09/04 02:30
12F:→ MOONRAKER:當然最直接的就是看gcc的math.h原始碼218.160.182.185 09/04 02:30
13F:→ MOONRAKER:不過那太累了 X(218.160.182.185 09/04 02:30
14F:→ EdisonX:vc 的原始碼沒開發出來,gcc 的會開放嗎 ?? 180.177.78.41 09/04 13:59
15F:→ EdisonX:有空我把 gcc 架起來,去端模一下,謝謝M大 180.177.78.41 09/04 13:59
16F:→ MOONRAKER:會吧,會在source的package裡面218.160.177.117 09/07 11:59
17F:→ MOONRAKER:不過那真的是太累了218.160.177.117 09/07 12:00
18F:→ EdisonX:真的不是件容易的事Orz,看懂一個就不容易. 180.177.78.41 09/07 16:41
19F:→ MOONRAKER:這有一個講用lookup table的實作法218.160.177.117 09/08 01:53
20F:→ MOONRAKER:中間講用22項的表就可以應付2^x218.160.177.117 09/08 01:54
21F:→ MOONRAKER:底下還有給範例程式,不過又沒看到表218.160.177.117 09/08 01:54
23F:推 bigpigbigpig:可以試試連分數(continued fraction) 61.61.252.34 09/08 08:36
24F:推 bigpigbigpig:Shanks' 1954 algorithm for 61.61.252.34 09/08 08:42
25F:→ bigpigbigpig:computing log(b)/log(a) 61.61.252.34 09/08 08:42
26F:→ EdisonX:Programming 真的到處都是神人,這些資料 180.177.78.41 09/08 14:02
27F:→ EdisonX:我都沒找到.謝謝 M 大及 b 大,感激不盡 !! 180.177.78.41 09/08 14:03