首页 > 其他分享 >为什么计算机对浮点型数字计算存在误差

为什么计算机对浮点型数字计算存在误差

时间:2023-04-11 23:45:33浏览次数:36  
标签:误差 计算机 二进制 0.25 0.3 0.6 浮点 printf

为什么计算机对浮点型数字计算存在误差?

我们输入的十进制小数在计算机中都是以二进制进行存储。比如:

我们把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;
}

执行结果:

img

可以看出当涉及到0.3的运算超出一定的精度后,就会计算错误。

这就是为什么浮点型运算在计算机中会存在误差的原因。

标签:误差,计算机,二进制,0.25,0.3,0.6,浮点,printf
From: https://www.cnblogs.com/cnlangyu/p/17308308.html

相关文章

  • 浮点数使用1
    doublenums=.123;//0.123//科学计数法System.out.println(5.12e2);//512System.out.println(5.12E-2);//0.0512//浮点数陷阱:doublenum11=2.7;doublenum12=8.1/3;System.out.println(num12);//接近2.7的小数System.out.pr......
  • 【计算机网络-传输层】TCP 协议
    目录1传输层概述1.1传输层的功能1.2端口号2TCP报文段2.1TCP报文段首部格式2.2TCP数据传送的过程3TCP连接管理3.1TCP连接的建立——三次握手3.1.1客户机向服务器发送TCP连接请求报文段3.1.2服务器向客户机发送TCP连接请求确认报文段3.1.3客户机向服务器发送TC......
  • 软考笔记(9)--计算机组成原理4--总线系统
    前言总线是多个系统部件之间进行数据传输的公共通路。所谓总线就是指能为多个功能部件服务的一组公用信息线,并且能够分时地发送和接收信息。通过总线连接,计算机可在各系统部件之间实现传输地址、数据和控制信息等操作。计算机系统中存储器、CPU等功能部件之间必须互联才能组成计......
  • 一天吃透计算机网络八股文
    网络分层结构计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。最全面的Java面试网站五层模型:应用层、传输层、网络层、数据链路层、物理层。应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统D......
  • INM379计算机游戏结构
    INM379ComputerGamesArchitecture:CourseworkSpecificationSynopsisTheaimofthecourseworkistogiveyouexperienceofusingadeployment-readyproductionframeworktoproduceafullyfunctionalgamedemonstratingsoundarchitecturalprinciplesins......
  • 计算机408考研攻略及总结
    复习资料王道单科书数据结构严蔚敏计算机组成原理白中英计算机组成原理唐朔飞计算机网络谢希仁操作系统汤子瀛真题王道真题讲解模拟题王道模拟题五轮复习法第一轮学习王道四门单科书第一轮只需要做选择题一两天搞不懂的内容直接跳过例子:组成原理的二......
  • 计算机网络通信
    今日目标理解OSI和TCP/IP分层模型理解数据封装与解封、数据传输过程掌握数制转换方法掌握IP地址及其分类/子网掩码及其作用 1、第一台多用途电子计算机:1946.2.14美国宾夕法尼亚大学计算导弹的弹道30人占地170平方重量30吨 2、1957年苏联卫星上天3、1969年-------......
  • 计算机网络知识点全面总结(有这一篇就够了!!!)
    1.1计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。TCP/IP四层模型与OSI体系结构对比:1.3层次结构设计的基本原则各层之间是相互独立的;每一层需要有足够的灵活性;各层之间完全解耦。1.4计算机网络的性能指标速率:bps=bit/s......
  • 现代计算机图形学——P1-2. Review of Linear Algebra
    (自用笔记)P1.(虚假的P1)计算机图形学、其研究内容及其相关领域与学科P1.(真正的P1)OverviewofComputerGraphicsP2.ReviewofLinearAlgebraP1计算机图形学——是研究怎样用计算机输入、生成(处理)、存储、显示、输出图形的一门学科。构成图形的要素:1.几何要素——形......
  • 计算机系统的组成(2软件系统篇)
    软件系统:系统软件、应用软件系统软件:操作系统、语言处理程序、系统支撑和服务程序、数据库管理系统应用软件:WPSoffice、Photoshop、Microsoftoffice等1)系统软件A.操作系统(OS)是人与计算机进行通信的一个接口,是对计算机硬件资源和软件资源进行控制和管理的各种程序的集合。(......