中级会员
 
- 积分
- 248
- 金钱
- 248
- 注册时间
- 2012-12-2
- 在线时间
- 67 小时
|
20金钱
本帖最后由 hwb_dream 于 2018-8-21 11:52 编辑
#include <stdio.h>
int main()
{
float dat;
int temp=999;
dat=temp/10.0;
if(dat<=99.9)
{
/* 我的第一个 C 程序 */
printf("Hello,Me ! \n");
}
else
{
printf("Hello, World !%f\n",dat);
}
return 0;
}
结果为什么是"Hello, World !99.900002"?
应该是这个原因:两个浮点数之间不能用==来判断是否相等,因为浮点数是对实数的近似,所以计算机中两个浮点数不可能完全相等,最多也只能保证其差值小于用户规定的误差限度。
|
最佳答案
查看完整内容[请看2#楼]
不是这个原因,而且int是32位,不是u8的8位,没有溢出(STM32是32位的,int是4字节)。
原因是浮点型的表示方法,类似于ADC,浮点型表示也是有类似最小分辨率的:大概就是可以勉强理解为给定的99.9无法用一个准确的浮点表示出来,只能用一个最接近的浮点型来表示。
你可以用 abs(n - m) < 0.0000001之类的运算来代替 == 运算。
|