如和判断两个浮点数是否相等

在chrome console输入console.log(0.7 + 0.1),你猜会得到什么结果?会输出0.7999999999999999,所以如果你进行这样的判断console.log(0.7 + 0.1 === 0.8),那么结果并不能如愿,会输出 false。

为什么会这样呢?引用知乎里面的一段回答:

主要问题是,你用十进制去想,0.7 是一个能准确表示的小数,而二进制却是循环小数。反过来想,就好像在三进制中 0.2 是一个很准确的数字,但在十进制中却是循环小数, 。除非用有理数表示,这些数字不能精确地用有限位的二进制表示,产生误差,0.7+0.1计算的结果也是有误差。把有误差的结果显示时,转换成十进位显示的算法发现该值与 0.8 相比,较接近 0.7999999999999999,所以显示后者。

那么怎样评断(0.7 + 0.1)与0.8是否相等呢?

我的想法是作差,差值的绝对值与一个很小的数对比(比如1e-7),如果差值小于此数,那么可以认为是相等的。

时间: 2024-10-11 18:43:27

如和判断两个浮点数是否相等的相关文章

不能用==判断两个浮点数相等

在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值fabs(a-b) 是否小于某个阈值,例如 1e-9. ////在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值 ////fabs(a - b) 是否小于某个阈值,例如 1e-9. //#include <stdio.h> //#include <math.h> //#define EPSILON 0.000001 //int main() //{ // floa

如何判断两个对象相等

前言 虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断. 相等 什么是相等?在<JavaScript专题之去重>中,我们认为只要 === 的结果为 true,两者就相等,然而今天我们重新定义相等: 我们认为: NaN 和 NaN 是相等 [1] 和 [1] 是相等 {value: 1} 和 {value: 1} 是相等 不仅仅是这些长得一样的,还有 1 和 new Number(1) 是相等 'Cu

matlab 判断两个矩阵是否相等

数学意义的相等 all(A(:) == B(:)) isequal(A, B) 但须注意的是:B = A,未必能保证 isequal(A, B)返回真,因为如果 A 中包含NaN,因为按照定义,NaN ~= NaN >> A = [1, NaN] >> B = A >> isequal(A, B) 0 >> NaN == NaN 0 1 2 3 4 5 6 7 浮点数相等 对于浮点数矩阵,判断两个矩阵是否精确相等意义不大,真正有意义的比较是比较两个矩阵是否足

java 判断两个时间相差的天数!

package com.datedaycha;     import java.text.SimpleDateFormat;     import java.util.Calendar;     import java.util.Date;     import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;     /*      * java 判断两个时间相差的天数     1.实现目标     输入:两

UIColor延伸:判断两个颜色是否相等

不管UIColor使用CIColor,CGColor还是其他方式初始化的,其CGColor属性都是可用的.CoreGraphics中提供一个函数,用于判断两个CGColor是否相等,因此我们可以通过这个函数判断两个UIColor是否相等,下面是看一个简单的例子: // 判断两个颜色是否是同一种颜色if (CGColorEqualToColor([UIColor whiteColor].CGColor, [UIColor colorWithRed:1 green:1 blue:1 alpha:1]

如何判断两个日期在一周内

如何判断两个日期在一周内,首先,需要搞清楚一周内到底是什么含义,国内通常是以周一作为每周的第一天,而西方普遍以周日作为每周的第一天. 以下,我们以西方的标准来处理这个问题. 常见的日期结构: struct DateTime { int year; int month; int day; int weekday; //days since Sunday - [0, 6] int hour; int minute; int second; }; 上述结构中与周相关的参数只有weekday,应该设法利

请编写一个程序,该程序可以接收两个数,并判断两个数是大于、小于、等于?

//作者:janushu //日期:2017/9/20 //功能判断两个数的大小 import java.io.*; public class CompareToNumDemo{ public static void main(String[] args){ try{ //输入流 从键盘上输入一个数 InputStreamReader isr = new InputStreamReader(System.in); //缓存读取一个数 BufferedReader br = new Buffere

判断两个IP是否处于同一子网(网段)

大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!接下来我们举例说明,如何去判断A和B两个IP是否在同一网段. A IP:202.194.128.9 B IP:202.194.128.14 子网掩码:255.255.255.0 1.把A和B的地址转换为二进制的 A:1100 1010.1100 0010.1000 0000.0000 1001 B:11

五层结构 判断两个IP是否处于同一子网?

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 应用层(各种协议)                                              端口 HTTP-----超文本传输协议----- 80 FTP  -----文件传输协议    ----- 21DNS  -----域名解析协议    ----- 53Telnet---远程控制协议      ----- 23SMTP ----网络管理协议    ----- 25 传输层 基于端口进行通讯补充:端口