永发信息网

float计算问题?

答案:6  悬赏:0  手机版
解决时间 2021-08-18 11:33
  • 提问者网友:愿为果
  • 2021-08-18 04:58

我变量是这样定义的:

float a = 2.11f;

float b = 2;

那么a+b=4.1099997

这是为什么呢?帮我解释一下这个,还帮我讲解一下float类型的特点。谢谢啦!

最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-08-18 06:09
因为float是单精度,默认是有效数字7~8位,以及根据计算机得二进制得转化又关系。
全部回答
  • 1楼网友:话散在刀尖上
  • 2021-08-18 11:54
float和double是不准确的。因为他们的值是取的近似值,与我们常说的四舍五入啊。保留多少位那种差不多。
  • 2楼网友:老鼠爱大米
  • 2021-08-18 11:32

很明显是float的精度问题;最后的几位被截断换算的时候弄丢了.就差了一些

float数据占用32bit, 在计算机存储中,首先要将上面的数更改为二进制的科学计数法

无论是单精度还是双精度在存储中都分为三个部分:

符号位(Sign) : 0代表正,1代表为负 1位 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 8位 尾数部分(Mantissa):尾数部分 23位

  • 3楼网友:想偏头吻你
  • 2021-08-18 10:04

#include <stdio.h> void main() {

float a = 2.11f;

float b = 2;

//那么a+b=4.1099997 printf("a+b=%f",a+b);

}

结果该等于

float 类型也就是实型数据,上面你赋值=2 其实后面会加0的,提高精度!

你上面的a+b 的结果应该不对吧?或者说你用的什么编译器?

  • 4楼网友:煞尾
  • 2021-08-18 08:55

你看到的2.11+2=4.11的情况是我们已十进制的方式计算。

而计算机是以二进制的方式计算的,算出结果后又转化成十进制展示给我们看

关键是2.11再往二进制转化的时候,是无限小数

所以计算出结果是4.1099997

  • 5楼网友:患得患失的劫
  • 2021-08-18 07:35

float和double不精确

它会自动在小数里面进行四舍五入的操作。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯