float、double -- 精度丢失问题

本文详细介绍了二进制浮点数在编程语言中的精度丢失问题,从浮点数的二进制表示到IEEE754标准,特别是单精度和双精度的差异。通过实例解析了0.1 + 0.2为何不等于0.3的原因,指出C#等语言中的decimal类型如何缓解这一问题。
摘要由CSDN通过智能技术生成

任何使用二进制浮点数的编程语言都会有这个问题精度丢失问题,如 C++、C#、java 等。

  • C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题.
    这里有人有疑问,C++ cout 出来的数据是期望得到的值,就认为 c++ 没这个精度问题,这就是纯胡扯,自己写两行代码试试不就知道了。
double a = 1.11;
double b = 2.22;
double c = b - a;	//1.1100000000000001	浮点数精度问题依然存在
cout << c;			//1.11	这里 cout 中对输出内容做了优化而已

1. 了解什么是二进制浮点数编程语言

即再计算机中是使用二进制进行加减乘除的编程语言。 计算过程如下:

  1. 用户输入的是十进制数字
  2. 编程语言进行计算处理时,会先转换为二进制数字
  3. 再进行二进制计算
  4. 最后再将二进制计算结果转换为十进制后输出。

故,只要处理计算浮点数用的是二进制,就属于二进制浮点数编程语言。

2. 了解进制转换

参考链接

2.1 十转二

十转二转换步骤为:

  1. 整数部分除 2 取余,逆序排列
  2. 小数部分使用乘 2 取整数位,顺序排列

例:

2.1 转为二进制:
	
	整数部分 2
	2 / 2 = 1 .... 0    
	1 / 2 = 0 .... 1    # 10
			 		  
	小数部分 1
	0.1 * 2 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值