前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一练(128)

基础知识 | 每日一练(128)

作者头像
小林C语言
发布2019-09-26 15:56:12
2950
发布2019-09-26 15:56:12
举报
读者:一个float变量赋值为3.1时, 为什么printf输出的值为3.0999999?

小林:大多数电脑都是用二进制来表示浮点和整数的。在十进制里, 0.1 是个简单、精确的小数, 但是用二进制表示起来却是个循环小数 0.0001100110011 ...。所以3.1 在十进制内可以准确地表达, 而在二进制下不能。在对一些二进制中无法精确表示的小数进行赋值或读入再输出时, 也就是从十进制转成二进制再转回十进制, 你会观察到数值的不一致. 这是由于编译器二进制/十进制转换例程的精确度引起的, 这些例程也用在 printf 中。

读者:执行一些开方根运算, 为什么是得到一些不同寻常的数字?

小林:确定你用了 #include <math.h>, 以及正确说明了其它相关函数返回值为double。另外一个需要注意的库函数是 atof(), 其原型说明在 <stdlib.h> 中。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档