首页
学习
活动
专区
工具
TVP
发布

C++笔记(5)——浮点数比较

判断是否相等 因为一个浮点数存储并不总是精确,例如在经过大量计算之后可能会将3.14保存为3.1400000000001或者3.1439999999999,这时候如果直接用==来比较这两个数的话会输出错误结果...,false(C++中==只有在两个数字完全相同情况下才判定为true)。...) 上面这行代码是通过宏定义来定义出一个名为Equ函数,这个函数会将a和b相减,如果相差结果绝对值小于极小值eps,那么就判定为true,否则为false。...另外还有: 在经过大量计算后可能因为误差累计,一个变量中存储0实际上是一个非常小负数,如果这时候对这个变量进行开根号操作sqrt,那么会报错(asin(x)类似,当存放x为+1或-1时也会出现类似的情况...这是一个bug,只能将结果放在字符串中然后和-0.00比较,如果对比成功那么将结果加上eps来变回0.00 。 参考 《算法笔记》胡凡著

2.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

C语言浮点数存储

C语言中,有两种类型浮点数:32位float和64位double,而在计算机中存储是用二进制科学计数法(即基数为2)表示值 例如100=1100100B=1.1001B*26,123.456...将C语言定义转换为汇编验证一下 ? 再看一个纯小数存储,例如0.00123456,这次倒着推导一下 ?...其中第一个0表示正值;挨着8位01110101B=117,表示指数为(117-127)=-10;最后23位表示尾数小数部分,前面加上整数部分1,再左移23位之后就是101000011101000011110110B...所以原值就是10604790/8589934592=0.0012345600407571,可见前10位小数都是正确,精度还可以 ? 最后试个double123.456 ?...好吧,double精度确实高,比float表示准多了! 我是泰山,专注VX 15年! 一起学习,共同进步!

1.4K11

PHP浮点数比较

PHP手册里有一句话:永远不要比较两个浮点数是否相等。 计算机内部处理浮点数方式决定了浮点数不可能100%精确,所以在处理浮点数运算时会出现精度损失问题。...> 第一条输出语句:在PHP4下输出$c可能是41.120000000001,或类似的结果,后面的1就属于精度损失部分。...声明一点:这不是PHP问题,而是计算机内部处理浮点数问题!在C/JAVA中也会遇到同样问题。...详细解释可参看《深入浅出浮点数 》 延伸一下:我们同样不能使用>、=或<= 那么,我们应该怎么比较两个浮点数相等呢? 看了上面的介绍后,我们就知道了:没办法精确比较两个浮点数相等!...so..我们只能在我们要精度范围内比较(比如上面的示例,我们只需要比较$c在小数点后两位内等于41.12即可)。 下面是PHP手册评论中示例 [php] view plaincopyprint?

1.8K41

C语言浮点数float类型秘密

1 前言 我们在学习 C 语言时,通常认为浮点数和小数是等价,并没有严格区分它们概念,这也并没有影响到我们学习,原因就是浮点数和小数是绑定在一起,只有小数才使用浮点格式来存储。...其实,整数和小数可以都使用定点格式来存储,也可以都使用浮点格式来存储,但实际情况却是,C 语言使用定点格式存储整数,使用浮点格式存储小数,这是在 “数值范围” 和 “数值精度” 两项重要指标之间追求平衡结果...浮点数转换到内存中存储步骤分为如下三步: 将浮点数转换成二进制 用科学计数法表示二进制浮点数 计算指数偏移后值 对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),而偏移量值与浮点数类型有关...其中负指数决定了浮点数所能表达绝对值最小非零数;而正指数决定了浮点数所能表达绝对值最大数,也即决定了浮点数取值范围。...更多案例可以go公众号:C语言入门到精通

3.9K2219

C语言 实现浮点数整型强制转化

接下来分析一下这32个位都是什么,大家都知道二进制四位可以用十六进制1位表示。 关于浮点数由十进制到二进制转换大家一定也清楚,整数部分除二取余,小数部分乘二取整。...最后结果是:12.125(10) = 1100.001(2) 浮点数共计占内存4个字节,即32位。这32位是按照这样规则存储: (1)一位符号位 整数为0 负数1。...真正转化现在开始,了解了前面的知识,我们就知道了浮点数是如何计算机中存储,将其转换成整型无非就是取到它整数部分即可。...下面实现这样一个单精度浮点数到整型强转函数: int float_to_int(float f) { int *p = (int*)&f; //由于指针访问内存是按照基类型进行,首先进行强转访问浮点数...(关于这点,目前还在测试,一定会有一个满意解释) 写到这里,差不多结束了,其实双精度浮点数强转时类似,只要能完全掌握双精度浮点数在内存中存数形式。

2.3K20

C语言进阶】内存中浮点数存储规则

二、 浮点数在内存中存储是怎样 2.1 引例 浮点数存储规则: 举例来说: 有效数字M和指数E特别规定 验证浮点数是不是这样存储 2.2 指数E三种情况 (1) E不全为0或不全为1 (2)...E全为0 (3)E全为1 三 、开头例题讲解 总结 今天我们讲解了 前言 大家在写C语言中都用过浮点数float,和double。...1.1 浮点数家族有哪些? C语言常用浮点数有: float doule long doule 其中 long double 是在C语言 C99& 新标准中增加。...这样做目的,是节省1位有效数字。 以32位浮点数为例,留给M只有23位, 将第一位1舍去以后,等于可以保存24位有效数字。 至于指数E,情况就比较复杂。...什么是浮点数 浮点数存储规则 浮点数在内存中存储模型 在IEEE 电气电子工程师协会中关于 指数E 和 有效数字M规定 指数E3种情况 希望大家有所收获呢。

15510

c语言浮点数输出格式控制,c语言输出格式控制「建议收藏」

1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E...-)记数法] %g(%G) 浮点数不显无意义零”0″ %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 e.g. 0123 %x(%X) 十六进制整数0f(0F) e.g...s 字符串 %% “%” 2.标志 左对齐:”-” e.g. “%-20s” 右对齐:”+” e.g. “%+20s” 空格:若符号为正,则显示空格,负则显示”-” e.g. “% 6.2f” #:对c,...“%m.ns”:输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n e.g. “%7.2s” 输入CHINA 输出” CH” “%m.nf”:输出浮点数,m为宽度,n为小数点右边数位...④m.n:m指域宽,即对应输出项在输出设备上所占字符数。N指精度。用于说明输出实型数小数位数。为指定n时,隐含精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。

1.5K40

c语言中字符串比较库函数是什么_c语言比较字符串大小

说起比较运算,肯定第一时间想到了C语言中关于比较相关运算符 “>、=、<=、==”,那么要比较两个字符串是否相等是不是直接用“==”比较就行了。下面就来看看这种方法行不行?...这就要说下一字符串在C语言比较特殊一点,在C语言中处理一般变量如整形、字符型、浮点型时,直接操作是变量值,比如 int a,b; a=b;在执行这行代码时候,是将b值拷贝一份然后复制给a。...比较运算符“==”在使用时候,也直接比较是变量值。而C语言在使用字符串时候,是通过地址引用而不是值引用来操作。...可以直接使用 C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向字符串和 str2 所指向字符串进行比较。...这个函数其实就是相当于把上面例程中对字符串每个字符独立比较方法一个封装,内部函数实现方式类似于下面这样。 由于字符串在C语言处理比较特殊,所以C语言提供了一个专门操作字符串库。

1.7K30

C语言整型和浮点数在内存中存储

但是在C语言中除了8 bitchar之外,还有16 bitshort 型,32bitlong型(要看具体编译器),另外,对于位数大于8位处理器,例如16位或者32 位处理器,由于寄存器宽度大于一个字节...0000 0000 0000 0000 1001 00 00 00 09 在内存中存储: 二.浮点数存储 浮点数类型包括:float、double 浮点数表示方法 根据国际标准IEEE(电气和电子工程协会...注:对于32位浮点数,最高1位是符号位s,接着8位是指数E,剩下23位为有效数字M。 对于64位浮点数,最高1位是符号位S,接着11位是指数E,剩下52位为有效数字M。...以32位 浮点数为例,留给M只有23位, 将第一位1舍去以后,等于可以保存24位有效数字。...E全为0 浮点数指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位1,而是还原为0.xxxxxx小数。这样做是为了表示±0,以及接近于 0很小数字。

14720

c语言和java语言哪个比较

c语言和java语言哪个比较好 java语言c语言区别有单文件编译时间java比c语言快;c语言可以直接操作内存,java不能直接操作;c语言可以封装动态库,java不行;c语言有指针,java没有指针...;c语言可以直接操作串口,java需要第三方jar包支持等等,那么c语言和java语言哪个比较好?...3、c语言和java哪个比较好 Java是跨平台,Java是安全,许多要求安全企业对Java需求很大,Java也一直排名语言榜第一位。...c语言更像是计算机程序语言基础,所以学会c语言向其他语言转移也是非常简单c语言是完全底层语言,比如驱动、通信协议之类,在Unix和Linux环境中也是不可或缺,另外在嵌入式领域也大有作为,而且...关于c语言和java语言哪个比较好,就给大家分享到这里了,Java是在c语言基础上,抛弃了一些指针之类东西,和c完全不同是Java是一门面向对象语言,所以还是希望大家合理选择。

1.1K30

C语言 | 冒泡排序比较大小

例23:C语言实现从小到大对10个数进行排序,要求使用冒泡排序实现。 解题思路:排序规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小。...,大数赋值给后面        array[i]=array[i+1];       array[i+1]=t;     }   }    printf("按照从小到大顺序排序:");//提示语句 ...[i]);   }    printf("\n");//换行    return 0;//函数返回值为0  } 编译运行结果如下: 请输入十个数:9 8 4 1 6 2 7 4 10 9 按照从小到大顺序排序...以上就是很著名“冒泡排序”,也称为“起泡排序”,读者通过此例对以后学习快速排序、堆排序等会有所启示。 留个问题,读者请思考从到小该如何排序呢?...C语言冒泡排序比较大小 更多案例可以go公众号:C语言入门到精通

1.3K2727

C语言函数实现比较大小

解题思路:这个问题逻辑很简单,主要就是把比较大小逻辑抽取出来即可,比较大小具体可以参考之前文章:C语言 | 由小到大输出两个数。...x:y;//把大数赋值给temp    return temp;//把temp结果返回到函数调用处  } 源代码演示: #include//头文件  int main()//主函数...x:y;//把大数赋值给temp    return temp;//把temp结果返回到函数调用处  } 编译运行结果如下: 请输入两个数:4,9 大数是:9 ------------------...注意:键盘输入两个数时,中间逗号应该时英文状态下,因为代码中逗号是英文,scanf函数键盘输入要和代码保存一致,如果是中文会输出以下结果。...留个问题,读者请思考如果比较是小数大小上面代码应该怎么改? C语言 | 函数实现比较大小 更多案例可以go公众号:C语言入门到精通

1.2K2220

小朋友学C语言(4):单精度浮点数与双精度浮点数

上节课 简单介绍了浮点数。计算机程序中浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确范围不一样。 计算机里最基本存储单位用位(bit)来表示。bit只能用来存储0或1。...稍大一点单位是字节(Byte,简写为B)。 再大一级是千字节(kilo Bytes),用k来表示。 再大一级单位是兆字节(Mega Bytes),用M来表示。一张照片大小通常为1~3M。...再大一级单位为G。一部高清电影大小通常为1~2G。 再大一级单位为T。...20.9f\n", a); double b = 2.123456789; printf("b = %20.9f\n", b); return 0; } 注意:这里%20.9f表示浮点数总共有...运行结果: a = 1.123456836 b = 2.123456789 从运行结果可以看出,单精度浮点数小数部分只有前6位是准确,后三位是不准确

2.4K120
领券