数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 8669|回复: 6

[求助]编程高手请进

[复制链接]
发表于 2005-11-1 20:55:09 | 显示全部楼层 |阅读模式
<>我今天写了一个程序,主要是试验函数的调用。我自己认为程序没有错,但是就是不能出来正确结果。请高手指点一下:</P>
<>#include "stdio.h"<BR>#include "math.h"<BR>double f(double x);<BR>void main()<BR>{double x,i;<BR>printf("please input x:\n");<BR>scanf("%f",&amp;x);<BR>i=f(x);<BR>printf("%f",i);<BR>}<BR>double f(double x)<BR>{double m;<BR>m=exp(-x)+x*x;<BR>return(m);<BR>}</P>
<>当输入:2.0 时,输出为:</P>
<P>exp:OVERFLOW error</P>
<P>Floating point error:Overflow.</P>
<P>如果将所有的double换成int就可以运行出正确结果。</P>
<P>请问这是为什么?</P>
<P>谢谢高手!!</P>
发表于 2005-11-1 23:55:41 | 显示全部楼层
<>把“f”换为“lf”,试一试.</P>
发表于 2005-11-2 01:54:16 | 显示全部楼层
double-&gt;float
发表于 2005-12-8 02:39:56 | 显示全部楼层

[原创]

scanf("%f",&amp;x);<BR>
发表于 2006-1-8 06:07:18 | 显示全部楼层
<><FONT size=5>2楼正解,%f用来输入浮点数float,double类型的用%lf格式,</FONT></P>
<><FONT size=5>用%f格式来输入double类型的数会产生截断错误。</FONT></P>
发表于 2006-11-15 04:15:50 | 显示全部楼层
我有亲身体验,楼上的说对了
发表于 2009-7-23 16:57:33 | 显示全部楼层
二楼说的对,但是5楼说的好像有点问题,并不是截断的问题,要是截断问题的话,一般的转换是遵循四舍五入的规则,比如double i=1.2,要使它转化成int类型的话,应该是1,但是上面的程序运行出来的是一些奇怪的字符(我的运行结果为:please input x:
2.0
1.#INF00

Press any key to continue),再说,float 类型 精度只有7位有效数字 double 类型 精度12-14位有效数字你输入2.0,传出来的也是2.0不存在截断的问题,我检验了一下我的论断,出现的结果是:
please input x:
2.0
4.135335
4.135335

Press any key to continue
结果并不会出现截断误差。问题的关键是函数scanf(),你传的参数不同,它调用不同形式的scanf(),所以你在使用不同的类型时,一定要对应类型的函数。否则就会出现意想不到的结果。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-26 18:50 , Processed in 0.081219 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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