首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在比较float结果时循环没有开始?

在比较float结果时循环没有开始的原因可能是由于浮点数的精度问题导致的。浮点数在计算机中是以二进制表示的,但由于浮点数的表示范围和精度是有限的,所以在进行浮点数的比较时可能会出现一些意想不到的结果。

浮点数的比较需要考虑到其精度问题,因为浮点数的表示并不是完全精确的。在计算机中,浮点数是以有限的位数来表示的,因此存在舍入误差。当两个浮点数进行比较时,如果它们的差值小于某个很小的阈值(通常称为机器精度),则认为它们相等。

在比较浮点数时,应该使用近似相等的方式,而不是直接使用等号进行比较。可以使用以下方法来比较浮点数:

  1. 使用一个很小的阈值来判断两个浮点数的差值是否小于该阈值,例如:fabs(a - b) < epsilon,其中epsilon是一个很小的正数。
  2. 使用相对误差来比较浮点数,即将两个浮点数的差值除以其中较大的一个数,然后判断相对误差是否小于某个阈值。
  3. 使用绝对误差和相对误差的组合来比较浮点数,即先判断绝对误差是否小于某个阈值,如果不满足,则再判断相对误差是否小于某个阈值。

在实际开发中,为了避免浮点数比较带来的问题,可以考虑使用整数进行计算,或者使用特定的浮点数比较函数,如math.isclose()函数。

总结起来,浮点数比较时需要考虑到浮点数的精度问题,不能直接使用等号进行比较。应该使用近似相等的方式,或者使用特定的浮点数比较函数来进行比较。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

LeetCode50,一题学会快速幂

都需要对整数进行拆分,不过不同的是背包问题当中拆分的结果进行的累加运算,而这里则是累乘。 如果你没有看过多重背包问题,也没有关系,我会从头开始将它讲清楚。...这个问题很好回答,当然是因为快啊,不然的话我们用循环计算幂不行么。但是为什么快速幂就快呢?为什么它比循环快呢?...原本我们求解的方法就是通过循环,每次循环都乘上一个x,循环n次之后得到结果。我们观察一下这个过程,会发现我们循环的时候,每一次循环,其实都代表了x的指数增加了1。也就是说它是线性增长的,当然就慢了。...第二个原因是没有必要,多进制的确会更快,但是很有限,所以没有这个必要。 说来也不怕笑话,我开始入门的时候,一直是用上的上面那种比较蠢的方法。而且放眼题解,至今没有找到一个人用这种蠢办法写快速幂的。...但是代码蠢没有关系,能够运行,能够AC,能够理解才是关键。一开始写蠢点的代码没有关系,只要保持进步,以后自然会越来越好的。

52720

Android动画基础详析 | 属性动画基础及ValueAnimator

为什么要引入属性动画 逐帧动画主要是用来实现动画的, 而补间动画才能实现控件的渐入渐出、移动、旋转和缩放效果; 属性动画是Android 3.0才引入的,之前是没有的。...从结果中可以看出, 移动前,单击TextView控件是可以弹出Toast提示的; 而在移动后,单击TextView控件则没有响应, 相反,单击TextView控件原来所在的区域会弹出Toast提示...(1)引入时间不同:View Animation是API Level 1引入的;而Property Animation是API Level 11引入的,即从Android 3.0才开始有与Property...注意, 如果我们设定动画初始值使用的是ofFloat()函数, 则每个值的类型必定是Float类型, 我们获取到的类型也必然是Float类型。...当动画开始,会通过onAnimationStart()函数返回; 每一次重复,都会调用一次onAnimationRepeat()函数; 调用cancel()函数取消动画,会通过onAnimationCancel

1.3K20

HashMap 底层实现原理是什么?JDK8 做了哪些优化?

加载因子为什么是 0.75? 当有哈希冲突,HashMap 是如何查找并确认元素的? HashMap 源码中有哪些重要的方法? HashMap 是如何导致死循环的?...这其实是出于容量和性能之间平衡的结果: 当加载因子设置比较大的时候,扩容的门槛就被提高了,扩容发生的频率比较低,占用的空间会比较小,但此时发生 Hash 冲突的几率就会提升,因此需要更复杂的数据结构来存储元素...} } } } } return newTab; } 从以上源码可以看出,JDK 1.8 扩容没有像...,高一位为 0,当结果为 0 表示元素扩容位置不会发生任何变化,而 key 2 信息如下: key2.hash = 10 0001 0001 oldCap = 16 0001 0000 这时候得到的结果...,高一位为 1,当结果为 1 ,表示元素扩容位置发生了变化,新的下标位置等于原下标位置 + 原数组长度,如下图所示: image.png 其中红色的虚线图代表了扩容元素移动的位置。

38770

​LeetCode刷题实战50:Pow(x, n)

都需要对整数进行拆分,不过不同的是背包问题当中拆分的结果进行的累加运算,而这里则是累乘。 如果你没有看过多重背包问题,也没有关系,我会从头开始将它讲清楚。...这个问题很好回答,当然是因为快啊,不然的话我们用循环计算幂不行么。但是为什么快速幂就快呢?为什么它比循环快呢?...的方法就是通过循环,每次循环都乘上一个x,循环n次之后得到结果。我们观察一下这个过程,会发现我们循环的时候,每一次循环,其实都代表了x的指数增加了1。也就是说它是线性增长的,当然就慢了。...第二个原因是没有必要,多进制的确会更快,但是很有限,所以没有这个必要。 说来也不怕笑话,我开始入门的时候,一直是用上的上面那种比较蠢的方法。而且放眼题解,至今没有找到一个人用这种蠢办法写快速幂的。...但是代码蠢没有关系,能够运行,能够AC,能够理解才是关键。一开始写蠢点的代码没有关系,只要保持进步,以后自然会越来越好的。

31220

如何高效实现矩阵乘?万文长字带你从CUDA初学者的角度入门

同时我们也注意到, M 和 N 越大的情况下,提升效果越发显著,这也是为什么我们希望每一个线程负责的分块大一点比较好。...而我则从循环展开的角度解释一下为什么我们需要了解这个优化方案,同时解释一下为什么该优化方案 GPU 上并不如 CPU 上那么有效。...例如我们假定 ,那么展开 m 和 n 处循环结果如下。...同时我自己的实践中发现,如果在一开始 kernel 写的比较垃圾,加了 double buffer 也没有什么卵用,还会让后续的优化不太好加上去。...为什么这么说呢?因为我采用的是行主序的方式存储的矩阵,因此如果一个 wave 的形状是扁平的,那么每个 Block 每一次循环遍历 B 矩阵只会有 次 cache miss。

2K20

工作三年,小胖连 HashMap 源码都没读过?真的菜!

JDK 1.8 扩容没有像 JDK 1.7 那样,重新计算每个元素的哈希值,而是通过高位运算(e.hash & oldCap)来确定元素是否需要移动,假设 key1 的信息如下: key1.hash...= 10;二进制:0000 1010 oldCap = 16;二进制:0001 0000 「使用 e.hash & oldCap 得到的结果,高一位为 0,当结果为 0 表示元素扩容位置不会发生任何变化...」,而假设 key 2 信息如下: key2.hash = 17;二进制:0001 0001 oldCap = 16;二进制:0001 0000 「这时候得到的结果,高一位为 1,当结果为 1 ,表示元素扩容位置发生了变化...9、HashMap 死循环分析 以下代码基于 JDK1.7 分析。这个问题,主要是 JDK1.7 的链表尾插法造成的。假设 HashMap 默认大小为 2,原本 HashMap 中没有一个元素。...循环引用 当然发生死循环的原因是 JDK 1.7 链表插入方式为首部倒序插入,这种方式扩容时会改变链表节点之间的顺序。

38530

阿里云面试:为什么建议使用 BigDecimal 进行浮点数运算?

示例代码: float a = 2.0f - 1.9f; float b = 1.8f - 1.7f; System.out.println(a);// 0.100000024 System.out.println...(b);// 0.099999905 System.out.println(a == b);// false 为什么浮点数 float 或 double 运算的时候会有精度丢失的风险呢?...我们知道计算机是二进制的,而且计算机表示一个数字,宽度是有限的,无限循环的小数存储计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。...通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。...1.0 的 scale 是 1,1 的 scale 是 0,因此 a.equals(b) 的结果是 false。

44910

Go语言的基本概念与语法 - Java技术债务

但是,函数外部, 每个语句都以关键字 (var, func, 等) 因此 := 结构不可用。 觉得每行都用 var 声明变量比较烦琐?...基本 for 循环包含三个由分号分隔的组件: init 语句: 第一次迭代之前执行 条件表达式:每次迭代前求值 post 语句:每次迭代结束执行 init语句通常是一个简短的变量声明,并且在那里声明的变量仅在该...没有条件的switch 没有条件的 Switch 同 switch true 一样。...nil 标识符是不能比较的 这点和 python 等动态语言是不同的, python 中,两个 None 值永远相等。对于 nil 来说是一种未定义的操作。...具体的大小取决于编译器和架构,上面打印的结果 64 位架构和标准编译器下完成的,对应 32 位的架构的,打印的大小将减半。

6910

Android OpenGL ES 高斯模糊与毛玻璃效果

那么为什么要这样做呢,其实这样做主要是为了渲染的效率,因为如果用两个for循环,那么总的就得计算uBlurRadius * uBlurRadius次,而如果分为两次,则总的循环次数就变为uBlurRadius...+ uBlurRadius,渲染的效率可以得到大大的提升,特别是当模糊半径比较大的时候。...emmm,不慌,先来分析下为什么出现这种结果 其实上面uBlurOffset = 1的时候,效果就不怎么好,当到5的时候,效果更差,这是因为 周边像素离当前像素越近,则说明它们之间的差异越大,而计算的时候...C.F.高斯研究测量误差从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。是一个在数学、物理及工程等领域都非常重要的概率分布,统计学的许多方面有着重大的影响力。...从图像上看,σ越大,正态分布图像就越平坦,σ越小,则正态分布就会集中中心位置,且越高 下面开始进入正题,高斯模糊和毛玻璃的实现 三、高斯模糊 正态分布,也就高斯分布,利用正态分布的密度函数做模糊处理,

2K70

SSE的学习

我只知道如果用malloc初始化的数据是没有对齐的。 问题2:SSE耗时并没有少于C++的,为什么? 不过的确version2不用在loop内set了,耗时比version1少。...问题2我查了一下,不知道是不是别人说的“测试方式不太对,因为这种测试如果放到一个简单的环境里,CPU的缓冲机制不能达到最优状态,所以你的测试结果很可能不正确而且会差很远.如果把这个代码放到一个比较复杂的环境里...第二个例子 向量内相邻元素相加得到新的结果,但这个为什么SSE并没有快 ?而第三个例子却快呢?初始化问题?...还有就是尽量让loop停止条件简单,而且循环停止条件始终是固定的,这样最好; 还建议少用打破循环的指令如break、goto等; 循环每次之间尽量无依赖,比如read-after-write操作...循环的步长尽量是1即每次+=1 至此《write fast code》基本看完了。 二、OpenMP 之前搞并行时其实就已经测试过了OpenMP,但并没有任何加速效果!

77150

《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!

为什么你不早说!——(必懂!题解)求素数 《看聊天记录都学不会C语言?太菜了吧》(21)(必懂!题解冒泡排序)现实生活中,打擂台比赛争名次竟用的是冒泡排序?——(必懂!...太菜了吧》(13)(9*9 乘法表)寻找电脑中的盲盒彩蛋——for 循环循环嵌套 九九乘法表 《看聊天记录都学不会C语言?太菜了吧》(12)循环有多容易?...小C:是的,执行到printf的时候,会先计算a+b的结果,最终将a+b的结果显示到%f的位置。 小媛:那为什么是%f呢? 小C:我问你3.14+10等于多少? 小媛:13.14,怎么了?...小媛:嗯,就跟看小说一样,莫名出现一个人物,如果在前面没有介绍那我就不认识他。 小C:是的。我再给你看看加减乘除是怎么做的。...小C:今天确实你表现比较好,再接再厉,我们明天再继续学吧。 小媛:好的,那我回去练习一下。 小C:加油。

32230

【C语言】探索数据的存储(下篇)

:死循环打印hello world 为什么?...但是实际情况是: 为什么?strlen的返回结果是size_t: size_t实际上是unsigned int。求字符串的长度根本不可能是负数,所以设置为unsiged int。...打印结果为> ---- 好了,通过上面几道小题热了一下身。现在我们来开始进入今天的重要内容:《 浮点型在内存中的存储》。下面让我们来一探究竟,浮点型在内存中是如何存储的。...IEEE 754规定,计算机内部保存M,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。...下面我们一起来分析分析为什么会出现这种结果: 首先,刚开始n的值是毋庸置疑的就是9 我们来看看*pFloat 看看num,继续看到*pFloat = 9.0; 通过计算器计算出结果

53650

数据分析利器 pandas 系列教程(六):合并上百万个 csv 文件,如何提速上百倍

这一年半我的 BuyiXiao Blog 上更新了差不多 10 篇(标签是 pandas,地址如下),但是几乎都没有发布公众号上。...最开始几百个几千个文件合并的时候这份代码运行没有问题,时间也非常短,但是几十上百万个文件合并,问题就暴露出来了。...按照上面的分析,待合并的 csv 文件夹越多,也就是 N 越大,相比较把连接放在 for 循环,只连接一次的耗时减少得越多(N 很小的时候减少不明显),代码如下: # -*- coding: utf-8...for 循环中使用"+"进行字符串拼接; 我觉得今天的推送和这个心法有异曲同工之妙,我愿改个标题:为什么BuyiXiao 不建议 for 循环中使用 append 或者 concat 进行 dataframe...拼接 或者更干脆些:为什么 BuyiXiao 不建议 for 循环中进行 dataframe 拼接。

43420

老板,用float存储金额为什么要扣我工资

但还是得静下心来想想为什么不能用float 为什么不能使用float存储金额 首先看个例子:FloatTest.java public class FloatTest { public static...(f1 + f2); } } 结果:7.8999996 和自己口算的值竟然不一样 ?...二进制里面,就是保证整数位是一个1。...到这里已经大致可以知道float为什么不精确了,首先在存储的时候就会造成精度损失了,在这里小数部分的二进制是循环的,但是仍然只能取前23位。 double造成精度损失的原因也是如此 ?...浮点类型存储同样范围的值,通常比decimal使用更少的空间 使用decimal计算效率不高 因为使用decimal时间和空间开销较大,选用int作为数据库存储格式比较合适。

60320

还在用 float 存金额?不怕扣工资吗!

但还是得静下心来想想为什么不能用float 为什么不能使用float存储金额 首先看个例子:FloatTest.java public class FloatTest { public static...,以此往复循环 0.6转化为二进制 乘以2 整数部分 小数部分 1.2 1 0.2 0.4 0 0.4 0.8 0 0.8 1.6 1 0.6 1.2 1 0.2 ...进入循环循环体为1001 所以...二进制里面,就是保证整数位是一个1。...为什么不精确了,首先在存储的时候就会造成精度损失了,在这里小数部分的二进制是循环的,但是仍然只能取前23位。...浮点类型存储同样范围的值,通常比decimal使用更少的空间 使用decimal计算效率不高 因为使用decimal时间和空间开销较大,选用int作为数据库存储格式比较合适,可以同时避免浮点存储计算的不精确和

1.3K10

我要偷偷的学Python,然后惊呆所有人(第一天)

那么,经过之前str()和int()操练,float()函数是不是好懂了一些? 总结一下 ---- 标准输入输出 好滴吧,可能有的人会犯嘀咕,为什么不讲输入输出。...所以,当你函数的括号内写出问题,input()函数会将此问题原样显示屏幕上,并在终端区域等待你针对此问题的回答。 可是,我们为什么要在终端处输入回答呢?不输入行不行?...当问题从代码世界传递给我们,可我们却没有回答,这扇等待输入的input()大门,就会一直处于敞开状态,一直等着你往里送回答。...那么这个代码执行的结果就是:0、3、6、9 循环使用 else 语句 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(...这个子句也是循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环开始

50820
领券