读书人

这个for循环为啥不能输出z=2.0是的值

发布时间: 2013-04-21 21:18:07 作者: rapoo

这个for循环为什么不能输出z=2.0是的值?
#include<stdio.h>
#include<math.h>
main()
{
double y;
int m;

for( y=0.0; y<=2.0; y=y+0.1 )
{
m = acos(1-y);

printf("y= %4.1lf m= %d\n",y,m);
}
} for循环,acos()函数
[解决办法]
ACOS函数的参数number表示角度对应的余弦值,数值必须在-1~1之间。看你当y=2.0时,操作的是2.1!!!
[解决办法]
浮点数不能精确表示
2.0在计算机中可能是2.0000001或者1.99999999,前者在楼主的程序中出错
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

[解决办法]
浮点数有精确范围,所以可能无法精确到某个值,一般是通过和这个值的差和一个很小的数(比如0.0001等,越小说明精度要求越高)进行比较来判断的
[解决办法]

引用:
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。


牛人,你的回答能通俗易懂些吗,这里多是菜鸟啊
[解决办法]
这是我学习C语言时我们老师对这个问题的解释(我们老是挺厉害的哦)。
*** 浮点数存储带来的问题

浮点型double 和 float 不能精确存储一个小数 。double中存储的100.0有可能是 100.000001 也可能是99.999999.(浮点数的存储遵循 IEEE754标准)
[解决办法]
2.0要修改为2.00001,浮点数经过计算会有误差,循环20次之后可能=2.00000000001这时<=可能不成立
[解决办法]
引用:
浮点数不能精确表示
2.0在计算机中可能是2.0000001或者1.99999999,前者在楼主的程序中出错

我觉得这位大神说的比较靠谱,我从1,1.1,1.2,,,,,试了很多,有的就没问题,但是有的就会出现你的问题,
[解决办法]
z 是什么?

读书人网 >C语言

热点推荐