作者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