标题: C语言程序执行问题 float型变量写法 [打印本页]

作者: 李冬    时间: 2022-6-18 13:54
标题: C语言程序执行问题 float型变量写法
float vcc;
if(vcc==23)
还是写成
if(vcc==23.0f)

作者: zhxiufan    时间: 2022-6-18 15:34
不用那么麻烦,编译器会强制转换的,所以
if(vcc==23)就可以,实在想看得像浮点一点,这样也可以
if(vcc==23.0)
作者: Hephaestus    时间: 2022-6-18 21:25
两种写法都是错误的。
应该这么写:
if(fabs(vcc-23.0)<Epsilon)
至于Epsilon定义成多大,你看着办。
作者: IOT-Mr-Li    时间: 2022-7-25 11:46
if (fabs(vcc- p) < 0.000001)可以根据差值小于某个精确度值来判断是否相等。
作者: Hephaestus    时间: 2022-7-25 18:00
IOT-Mr-Li 发表于 2022-7-25 11:46
if (fabs(vcc- p) < 0.000001)可以根据差值小于某个精确度值来判断是否相等。

这个“0.000001”取值要根据数据实际范围来定,IEEE754单精度mantissa是23位(二进制),相当于7位(十进制)精度。那么这个“0.000001”对于0.5~5的数据范围来说就是个相当不错的数值,但是对于10来说就完全没法用了。
作者: 260189914    时间: 2022-7-25 18:07
都可以的,编译器会处理好的。
作者: Hephaestus    时间: 2022-7-26 21:20
260189914 发表于 2022-7-25 18:07
都可以的,编译器会处理好的。

都不可以,你对浮点数运算一无所知。

浮点数运算总是有误差的,像整数运算那样绝对的匹配是不可能的(概率很小,跟中彩票差不多)。
作者: wfqxgw    时间: 2022-7-27 10:27
如果不是特殊场合。一会我会把浮点数转成整形再做这种逻辑运算。要对比小数点后面多少位。就将float数乘以10,100,1000.。。。。就可以了。
作者: liucan2020    时间: 2022-7-30 16:55
浮点运算是有误差的 ,这样写 很可能误判,fabs(),这个函数了解一下
作者: emptyxiao    时间: 2022-8-2 21:04
23.0或者23.f都可以
作者: emptyxiao    时间: 2022-8-2 21:05
不过最好用fabs,浮点等于会警告




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1