

为什么计算机对浮点型数字计算存在误差 - 廊虞
source link: https://www.cnblogs.com/cnlangyu/p/17308308.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为什么计算机对浮点型数字计算存在误差?
我们输入的十进制小数在计算机中都是以二进制进行存储。比如:
我们把0.25转换为二进制
0.25 * 2 = 0.5 取0
0.50 * 2 = 1.0 取1
所以十进制0.25的二进制应当为0.01
但是我们把0.3转换为二进制存储
0.3 * 2 = 0.6 取0
0.6 * 2 = 1.2 取1
0.2 * 2 = 0.4 取0
0.4 * 2 = 0.8 取0
0.8 * 2 = 1.6 取1
0.6 * 2 = 1.2 取1
0.2 * 2 = 0.4 取0
......
所以十进制0.3的转为二进制应当为0.01001100110011的无限循环小数。
由此可见0.3在计算机中存储的值永远小于0.3,所以当使用0.3计算时,就会产生误差。
在计算机中浮点型不能直接使用等号比较也是同一个道理。举个李子:
#include<stdio.h>
void comp(double a, double b){
printf("两个数:a = %g, b = %g 开始比较\n", a, b);
if(a == b){
printf("a equal b\n");
}
else{
printf("a not equal b\n");
printf("a - b = %g\n", a - b);
}
}
int main(){
comp(0.25 + 0.25 + 0.25 + 0.25, 1.0);
comp(0.3 + 0.3, 0.6);
comp(0.3 + 0.3 + 0.3 + 0.1, 1);
return 0;
}
执行结果:

可以看出当涉及到0.3的运算超出一定的精度后,就会计算错误。
这就是为什么浮点型运算在计算机中会存在误差的原因。
Recommend
-
37
在量子在分布式机器学习应用中,各个节点之间的通信效率往往会成为整体性能的关键制约因素,目前的常见解决方法是对节点之间的通信信息进行压缩,但这会引入量化误差。为了解决这一问题,腾讯 AI Lab 提出了一种误差补偿式量化随机梯度下...
-
63
说起机器学习就不能不提到误差函数,基于梯度下降算法的机器学习问题本质上都可以抽象成误差函数的优化过程。误差函数的设计上决定了机器学习任务的成败,本文我们就来聊聊误差函数。 概念/原理 误差函数一种量化模...
-
32
文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读
-
37
前言 最近公司某小伙子做了一个商城的微信支付相关的接口,其中包含退款,在测试过程中发现部分单据没有退款,微信支付提示退款金额跟支付金额不匹配(大于支付金额),检查数据库和调试过程中,发现商品的单价和手工计算出来...
-
9
发达国家技术工人操作误差仅千分之一,我国只能做到百分之一? Techlife
-
9
浮点计算误差集累2012-06-05同一个函数,即使用递归和非递归两种形式实现,其计算结果都可能不相同。比如计算 1+e2+e3+…+endouble f(int n) { if(n == 0) return exp(0); else...
-
7
点击上方“3D视觉工坊”,选择“星标”干货第一时间送达本次介绍一个...
-
5
Url排重Bloom Filter 算法、误差及其他 Url排重Bloom Filter...
-
13
浮点数公式的累计误差边界计算 - 林忠威的博客 | ExtreLin Blog 浮点数公式的累计误差边界计算 <在计...
-
14
为什么会出现 SETTIMEOUT 倒计时误差更新日期: 2023-06-02阅读: 13标签:
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK