记C语言浮点数运算处理 “坑” 一则

看一小段C语言程序:

在你心目中, 变量 I 是怎样的结果?

如果你理所当然地认为是3的话, 那么你就错了~~~

实际结果应该是2. 为什么?

简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999……

因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

就算现在你已经知道这个”坑”了, 但还是不小心会犯, 所以务必要牢记~~~

处理办法:

  1. 使用精度更高的double.

  2. 取整之前四舍五入(加上一个非常小的0.00000…….005, 但要注意浮点数的精度范围), 就像下面这样.

同时也要值得注意的是, 这个四舍五入的操作只能用于取整的时候, 你不能加在原浮点值上面改变了原来的浮点数值.

女孩不哭 @ cnblogs.com/memset @ 2014-05-02

Original: https://www.cnblogs.com/memset/p/c_float_precision_problem.html
Author: 女孩不哭
Title: 记C语言浮点数运算处理 “坑” 一则

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536359/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java C# C语言中的占位符

    一般拼接一段字符串在编程中是很常见的事,下面简单做个总结: 什么是占位符? 占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 1.Java中处理方法: 方法一应该是使…

    C语言 2023年5月29日
    061
  • 最值得学习阅读的10个C语言开源项目代码

    Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模…

    C语言 2023年5月29日
    064
  • c语言-动态内存分配(上课)

    源程序: include //主菜单void menu(){printf(“\n****\n”);printf(“1. 创建单链表\n&#822…

    C语言 2023年5月29日
    062
  • Kruskal算法(一)之 C语言详解

    本章介绍克鲁斯卡尔算法。和以往一样,本文会先对克鲁斯卡尔算法的理论论知识进行介绍,然后给出C语言的实现。后续再分别给出C++和Java版本的实现。目录1. 最小生成树2. 克鲁斯卡…

    C语言 2023年5月29日
    068
  • 快速学习C语言一: Hello World

    估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上。 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的。 先快速学习并练习一些基本的语言…

    C语言 2023年5月29日
    082
  • c语言 结构体(二)-上课用

    源程序: //编写一个函数print,输出学生的信息,该数组有5个学生的记录,包括://num, sname, score[3],用主函数输入这些记录,用print函数输出这些记录…

    C语言 2023年5月29日
    071
  • 理解C语言声明的优先级规则

    A 声明从它的名字开始读取,然后按照优先级顺序依次读取。 B 优先级从高到低依次是: B.1 声明中被括号括起来的那部分 B.2 后缀操作符: 括号()表示这是一个函数,而 方括号…

    C语言 2023年5月29日
    060
  • 【C语言天天练(三)】typedef具体解释

    引言: typedef与define的不同★★★★★ 1.与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。 2.typedef的解释由编译器,而不是预处…

    C语言 2023年5月29日
    059
  • C语言-转

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/JohnABC/p/8458883.htmlAuthor…

    C语言 2023年5月29日
    068
  • C语言结构联合位字段知识体系总结大学霸IT达人

    C语言结构联合位字段知识体系总结大学霸IT达人 C语言的基础类型中只能去定义单一类型的变量用于指代数据,但在现实生活中我们常常要处理的数据却会包含多种类型的数据。 例如,公司员工的…

    C语言 2023年5月29日
    057
  • 邻接表有向图(一)之 C语言详解

    本章介绍邻接表有向图。在”图的理论基础“中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了。和以往一样,本文会先给出C语言的实现;后续再分别给出C…

    C语言 2023年5月29日
    070
  • C语言switch 第一行不能定义变量的解决办法

    1.case后加一行代码 switch(cmd) { case CMD_A:break; case CMD_B: printf("加&#x4…

    C语言 2023年5月29日
    062
  • 【揭秘】C语言类型转换时发生了什么?

    ID:技术让梦想更伟大作者:李肖遥链接:https://mp.weixin.qq.com/s/ZFf3imVaJgeesuhl1Kn9sQ 在C语言中,数据类型指的是用于声明不同类…

    C语言 2023年5月29日
    062
  • C语言getopt()的8个用法

    概况 例子1 例子2 例子3 例子4 例子5 例子6 例子7 例子8 概况 做 CSAPP 的 CacheLab 的第一个门槛是学习使用 getopt() 函数。它是 Linux …

    C语言 2023年5月29日
    091
  • Prim算法(一)之 C语言详解

    普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法。 基本思想对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小…

    C语言 2023年5月29日
    074
  • c语言程序(上课用)

    源程序: include //功能:冒泡排序//作者:zhongliqi//编写时间:void bubble(int m[],int n){int i,j,t;for(i=0;i …

    C语言 2023年5月29日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球