找回密码
 欢迎注册
楼主: liangbch

[擂台] 计算百万位e

[复制链接]
发表于 2008-12-15 17:07:35 | 显示全部楼层
就是说
如果逐渐逼近一个整数的对数值
用精度高的数字的对数好
还是无所谓?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-15 18:25:33 | 显示全部楼层
就算查表
但是表的精度是固定死的
不能动态改动呀
我一直想找到完美的解决方案
用简单的步骤能够尽快计算出结果
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-15 18:50:39 | 显示全部楼层
我在想,下面的泰勒展开式:$e^x=\sum_{n=0}^\infty( x^n/n! )\quad(|x|<+\infty)$
当x比较大时,是否依然高效实用?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-15 19:17:58 | 显示全部楼层
数学上是成立的
但是计算上不适用
最大项是n=[x]或[x]+1,然后向2边递减
我觉得至少找到一种能够得到所需精度的方法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-12-15 19:40:27 | 显示全部楼层

回复 70# gxqcn 的帖子

就算法上,e^x 更容易实现,不论是造对数表还是求一个比较小的x的e^x.
至于精度损失,我我的方法始终用的 底数是e, 对对于10^n, 由于n是整数,也不会有精度损失的,另外对于
对数和指数计算,本来就是浮点数,和进制无关,一般情况下也不会取整为一个整数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-15 19:42:12 | 显示全部楼层
对73#,我想应该要求$ |x| <= 1$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-12-15 20:04:23 | 显示全部楼层
回72楼:


  这个我早就想到了,这个对数表是不需要存储精确值的。

下面是这个算法的一些具体实现:

就查表算法而言:
求 $e^x$ 的对数的过程其实就是求这样一个序列:
  $n_1, n_2, n_3, n_4...n_k, $ (这几个数的对数分别是 $m_1,m_2,m_3,m_4,..m_k$), 使得
  $x=m_1+ m_2+m_3+m_4+...m_k+ r$,r为不大于指定的值的余项。
   在查表过程中,我们并不需要知道 $m_k$ 的准确值,只需一个精度很小的值就可以了,需要精确到多少位和余项的最大值有关,如余项要求小于$10^{-32}$, 则这个对数表中中对数值要至少精确到32为有效数字。 同时在这个对数表中,对每一个$n_k$,都要存储他的质数分解式,$12/5=2^2*3^1*5^-1$. 等这个序列确定了,再求$ m_1+m_2+m_3+... m_k$的精确值和余项r的精确值。由于$m_k$可以表示为几个小质数的线性表达式,只要这个小质数的对数足够精确, $m_1+ m_2+m_3+..m_k$亦可足够精确。
  现在只有一个问题,如何求小质数的对数。对此,可有2个方法。
  1. 事先计算出这些小质数的对数,并精度到足够多的有效数字。在计算时,将其值从文件载入,需要多少位就载入多少位。
  2.实时求值,程序启动后,预先求出这几个小质数的对数,并精确到预定精度,如果在计算过程,有更高的精度需要,再重新计算到更高的精度。使用好的算法,求解小质数的对数并不困难,其求解速度应该比求同样精度的e更快。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-16 07:35:57 | 显示全部楼层
原帖由 无心人 于 2008-12-15 19:42 发表
对73#,我想应该要求$ |x|<= 1$  


就公式来说,没有该限定。
但就计算来说,可能在 $ |x|<= 1$ 时收敛才较快,理由见 74# 仙剑魔 的帖子。

我原本想将指数小数点后转成二进制,而后逐级开方再相乘,但感觉效率非常低下。

liangbch 的算法是比较高效的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-16 08:31:13 | 显示全部楼层
计算$e^x$,我们可以将x的二进制指数部分和尾数部分分开(计算机内部表示是二进制,所以这个拆分很简单),假设
$x=a*2^b$,其中$1/2<=|a|<=1$
那么$e^x=(e^a)^{2^b}$
所以可以先计算$e^a$,然后连续平方b次
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-12-16 08:37:56 | 显示全部楼层
上述算法比较可行,后面的平方只要保留到指定精度即可,
而 $e^a$ 的计算就可用 liangbch 的算法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 11:47 , Processed in 0.044796 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表