python浮点型精度损失问题_解决float型数据精度损失问题

本文探讨了浮点型数据在Python中由于存储方式导致的精度损失问题,以及如何通过放大后再除以特定数值来降低这种误差。通过示例展示了2.25和2.2在转换过程中的精度差异,强调了浮点数运算中的潜在误差,并提醒在处理浮点数时需要注意精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:浮点型数据存储方式会导致数据精度损失,增大计算误差。

float fval = 0.45;  // 单步调试发现其真实值为:0.449999988

double dval = 0.45; // 单步调试发现其真实值为:0.45000000000000001

当很多个这样的单精度浮点型数据进行运算时,就会有累积误差,使得运算结果达不到理想的结果。尤其是对那种需要判断相等的情况(浮点型数据判断相等会有误差)。

因此我们可以通过把浮点型数据放大1e6倍,把它赋给一个整型变量,把得到的结果再除以1e6,就会使精度损失降到最低。

float a = 0.45;    // 0.449999988double b = 0.45;int c = 1e6 *b;    // 450000double d1 = 2 *a;   // 0.89999997615814209int d = 2 *c;     // 900000double d2 = d / 1e6; // 0.90000000000000002, 推荐方式

double d3 = 2 * 0.45; // 0.90000000000000002

下面是浮点型数据存储方式,转自:https://www.cnblogs.com/wuyuan2011woaini/p/4105765.html

C语言和 C#语言中,对于浮点型的数据采用单精度类型(float)和双精度类型(double)来存储:

float 数据占用 32bit;

double 数据占用 64bit;

我们在声明一个变量 float f = 2.25f 的时候,是如何分配内存的呢?

其实不论是 float 类型还是 double 类型,在存储方式上都是遵从IEEE的规范:

float 遵从的是 IEEE R32.24;

double 遵从的是 IEEE R64.53;

单精度或双精度在存储中,都分为三个部分:

符号位(Sign):0代表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值