- == 系统问题,暂停聊天功能。==
- 【征集】西西河的经济学,及清流措施,需要主动参与者,『稷下学宫』新认证方式,24年网站打算和努力目标
主题:【求助】由一个编程考试想到的 -- 东方射日
前两天有一个remote coding test,题目是:
Find the first 10 consecutive digits of the mathematical constant "e" for which every digit from 0-9 is present only once.
看这个题目,我马上上网搜到e的定义是自然数阶乘的倒数和的极限。有了这个定义,我大约花了两个小时编程,调试和优化,后来有了代码和结果。(有兴趣的可以给我发短消息,我可以给你发我的代码,看看还有没有优化空间)
// My result:
// The first place find 0 - 9 is begin at 1729 :
// 0719425863
我试了下效率还算满意,e计算到小数点后10000位在我那台烂机器(p4 2G, 512M : 不许笑!!)上也只用1秒左右。
发出去后,突然想到是不是可以也计算一下其他的无理数,例如根号2。那么应该有以下函数来精确计算一个正整数的平方根:
string sqrt(int n, int num)
// 返回n的平方根精确到小数点后num位
不过,平方根的计算我就捉瞎了,搜一下,找到例程:
double Sqrt(double a,double p)//a是被开平方根数,p是所求精度
{
double x=1.0;
double check;
do{
x=(a/x+x)/2.0;
check=x*x-a;
}while(check<-p || check>p);
return x;
}
有了这个迭代就好办了,反正用字符串来精确计算的代码上面已经有了。不过我的问题是:
以上红字部分:x=(a/x+x)/2.0;
是怎么来的?为什么?
立方根又如何计算了?
- 相关回复 上下关系8
🙂【求助】由一个编程考试想到的
🙂请问楼主是怎么保持精度的 krone 字189 2009-01-05 13:25:43
🙂要想高精度计算,绝对不能用浮点数(附计算e的源代码) 1 东方射日 字2628 2009-01-07 22:31:52
🙂广义牛顿法迭代求值。 3 mntdew 字328 2008-12-21 20:20:40
🙂百度了一下 earthcolor 字209 2008-11-20 06:08:53
🙂这个是逼近法求开方的经典算法嘛,呵呵 1 wildpig 字92 2008-11-19 22:56:44
🙂孤陋寡闻啊,牛顿的算法我竟不知道 东方射日 字26 2008-11-19 22:59:50
😜无责任乱入~~~红字的2改成3试试? 肖邦 字0 2008-11-19 22:45:45