已经提示Floating Point:Square Root of Negative Number?还为达到精度要求,怎么办?
精度控制才到0.0001就已提出上诉问题了,我要求达到10负10次方?
另10的负10次方这样表示:10e-10可以吗?谢谢!
问题点数:50、回复次数:8Top
1 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-03 20:29:58 得分 0
1。你那句e文啥意思?不懂
不过 double 的精度为2.22045e-016,好像比你说的要小啊。
2。那个表示是正确的Top
2 楼huangran_lw(恍然)回复于 2003-12-03 22:17:43 得分 0
程序如下:
void euler()
{
long double y1;
long double y=1.0;
long double h=1.0;
while (fabsl(e-y)>0.0001){
h=h/10;
int n=1/h;
y=1.0;
for (int i=1;i<=n;i++){
y1 = y+h*y;
y = y1;
}
}
cout<<y<<endl;
}Top
3 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-03 22:47:25 得分 0
完整点吧。
这也看不出你要干嘛。Top
4 楼zhuang1415(吉力)回复于 2003-12-03 22:53:42 得分 0
是不是和while循环中的0.0001有关系啊?
楼主可以改成别的或是用别的表示方法改变控制语句试试!如 (fabsl(e-y))/10000.00>1;Top
5 楼zhuang1415(吉力)回复于 2003-12-03 22:55:10 得分 0
(fabsl(e-y))/10000.00)-1>0;这样吧Top
6 楼huangran_lw(恍然)回复于 2003-12-04 10:41:51 得分 0
这是数值分析中得误差估计呀!:)Top
7 楼agilecoder(龙马)回复于 2003-12-04 11:01:33 得分 50
while (fabsl(e-y)>0.0001){
h=h/10;
int n=1/h;
y=1.0;
for (int i=1;i<=n;i++){
y1 = y+h*y;
y = y1;
}
int n=1/h;这句话有问题吧
变量h是long double 型的,变量n是int型
Top
8 楼aojunpeng313001(倦鸟)回复于 2003-12-04 11:41:21 得分 0
小弟说两句,三年前小弟曾经研究过精度的无限扩展问题,思路如下:(因为没有太多时间,这里只给出除法的思路)
很简单就是用STRING和INT的转换,除法不用/,而是用%把得到的商做为整数部分换成STRING并且加上".",然后将余数*10的N倍(是一个可在范围内的数),然后%把商直接加到STRING中,以此类推,如果想对此STRING进行数学运算就可仿真数学运算的过程了.
小弟愚见,不登大雅之堂,大家多多交流.
Top




