作者EdisonX (闭上眼的鱼)
看板Prob_Solve
标题[其他] 数值分析 - 非整数次方 (幕次)
时间Fri Sep 2 18:12:35 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
1F:推 ledia:2.5 ** (12/100) = (2.5 ** 12) ** 0.01 09/02 22:27
2F:→ EdisonX:谢谢 ledia , 但最後还是会陷入 x ** (0~1,小数次方) ? 09/02 22:31
谢谢 ledia 不吝出手相助, 但最後似乎还是会卡在 (x) ^ (0.01) 怎麽求,
这是我目前疑或的地方。
另想再多问的是, 若化简到 x^ 0.234,是否可不用化成 x^(234)^(0.01)
或 x^234 * x^0.01 ,就直接算的算法?我怕化简後误差会大得太夸张 XD
--- 分隔线 --- 分隔线 ---
下面再补一下我的想法,我想过用 a^b = ln (b * exp (a) ),
exp(a) 用 Taylor 逼近, ln (b * exp(a) ) ,假设 b * exp(a) = x
去算 (1/t) 从 (1~x) dt 的积分, 这应就是结果.
但上面, Taylor 逼近 exp , 积分法求 ln , 这似乎非常耗时,
虽还没实做过, 但比起一般 compiler 应慢十倍以上吧?
还是,要达到与 math.h 相仿,精度 DBL_EPS ,除了 _asm 没第二条路?
上面, 不知我的想法有没有暇疵?或是有其它不同方面的想法可供参考?
谢谢各位。
※ 编辑: EdisonX 来自: 180.177.78.41 (09/02 23:19)