找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2191|回复: 10
打印 上一主题 下一主题
收起左侧

C语言程序执行问题 float型变量写法

[复制链接]
跳转到指定楼层
楼主
ID:709761 发表于 2022-6-18 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
float vcc;
if(vcc==23)
还是写成
if(vcc==23.0f)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:121859 发表于 2022-6-18 15:34 | 只看该作者
不用那么麻烦,编译器会强制转换的,所以
if(vcc==23)就可以,实在想看得像浮点一点,这样也可以
if(vcc==23.0)
回复

使用道具 举报

板凳
ID:883242 发表于 2022-6-18 21:25 | 只看该作者
两种写法都是错误的。
应该这么写:
if(fabs(vcc-23.0)<Epsilon)
至于Epsilon定义成多大,你看着办。
回复

使用道具 举报

地板
ID:1040441 发表于 2022-7-25 11:46 | 只看该作者
if (fabs(vcc- p) < 0.000001)可以根据差值小于某个精确度值来判断是否相等。
回复

使用道具 举报

5#
ID:883242 发表于 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来说就完全没法用了。
回复

使用道具 举报

6#
ID:1040502 发表于 2022-7-25 18:07 | 只看该作者
都可以的,编译器会处理好的。
回复

使用道具 举报

7#
ID:883242 发表于 2022-7-26 21:20 | 只看该作者
260189914 发表于 2022-7-25 18:07
都可以的,编译器会处理好的。

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

浮点数运算总是有误差的,像整数运算那样绝对的匹配是不可能的(概率很小,跟中彩票差不多)。
回复

使用道具 举报

8#
ID:419909 发表于 2022-7-27 10:27 | 只看该作者
如果不是特殊场合。一会我会把浮点数转成整形再做这种逻辑运算。要对比小数点后面多少位。就将float数乘以10,100,1000.。。。。就可以了。
回复

使用道具 举报

9#
ID:1040201 发表于 2022-7-30 16:55 | 只看该作者
浮点运算是有误差的 ,这样写 很可能误判,fabs(),这个函数了解一下
回复

使用道具 举报

10#
ID:1041246 发表于 2022-8-2 21:04 | 只看该作者
23.0或者23.f都可以
回复

使用道具 举报

11#
ID:1041246 发表于 2022-8-2 21:05 | 只看该作者
不过最好用fabs,浮点等于会警告
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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