看板 Programming 關於我們 聯絡資訊
※ [本文轉錄自 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)
MOONRAKER:請看NRiC (Numerical Recipes in C)218.160.182.185 09/03 23:16
EdisonX:感謝 MOONRAKER 指示提醒。 180.177.78.41 09/03 23:19
MOONRAKER:抱歉,他們還是要用math.h X(218.160.182.185 09/03 23:20
MOONRAKER:那麼基礎的計算他們沒有自己做 X(218.160.182.185 09/03 23:21
MOONRAKER:只有參考價值 http://goo.gl/UlOYR218.160.182.185 09/03 23:23
EdisonX:嗯嗯,我是很好奇,目前想法卡在 e^x 180.177.78.41 09/03 23:23
EdisonX:用taylor series 展開,速度差100倍. 180.177.78.41 09/03 23:23
EdisonX:所以想說這部份是不是各家用組語寫的. 180.177.78.41 09/03 23:24
EdisonX:再次感謝 M 大提供的資源 :) 180.177.78.41 09/03 23:27
MOONRAKER:一定有optimization,而且運用更快的算218.160.182.185 09/04 02:29
MOONRAKER:法,不過我也不知道這種東東從哪裡找起218.160.182.185 09/04 02:30
MOONRAKER:當然最直接的就是看gcc的math.h原始碼218.160.182.185 09/04 02:30
MOONRAKER:不過那太累了 X(218.160.182.185 09/04 02:30
EdisonX:vc 的原始碼沒開發出來,gcc 的會開放嗎 ?? 180.177.78.41 09/04 13:59
EdisonX:有空我把 gcc 架起來,去端模一下,謝謝M大 180.177.78.41 09/04 13:59
MOONRAKER:會吧,會在source的package裡面218.160.177.117 09/07 11:59
MOONRAKER:不過那真的是太累了218.160.177.117 09/07 12:00
EdisonX:真的不是件容易的事Orz,看懂一個就不容易. 180.177.78.41 09/07 16:41
MOONRAKER:這有一個講用lookup table的實作法218.160.177.117 09/08 01:53
MOONRAKER:中間講用22項的表就可以應付2^x218.160.177.117 09/08 01:54
MOONRAKER:底下還有給範例程式,不過又沒看到表218.160.177.117 09/08 01:54
MOONRAKER:挺有趣可惜沒空看 http://goo.gl/bsb8J218.160.177.117 09/08 01:55
bigpigbigpig:可以試試連分數(continued fraction) 61.61.252.34 09/08 08:36
bigpigbigpig:Shanks' 1954 algorithm for 61.61.252.34 09/08 08:42
bigpigbigpig:computing log(b)/log(a) 61.61.252.34 09/08 08:42
EdisonX:Programming 真的到處都是神人,這些資料 180.177.78.41 09/08 14:02
EdisonX:我都沒找到.謝謝 M 大及 b 大,感激不盡 !! 180.177.78.41 09/08 14:03