《算法技术手册》一3.4.3 浮点值的比较

简介: 本节书摘来华章计算机《算法技术手册》一书中的第3章 ,第3.4.3节, George T.Heineman Gary Pollice Stanley Selkow 著 杨晨 曹如进 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4.3 浮点值的比较

因为浮点值只是近似,所以即使是最简单的浮点操作都有可能出错。例如如下表达式:
if (x == y) {...}
这个表达式是真的表示两个浮点数完全相等吗?或者是表示这两个数近似相等吗(这种情况下可以使用≌这个符号)?有没有两个值虽然不同,但是相差非常小却仍然被认为是相等的呢?我们来看个例子,笛卡儿坐标系上有三个点,p0 = (a, b)、p1 = (c, d)和p2 = (e, f),表示两个有向线段(p0, p1)和(p1, p2)。我们能够使用(c - a)(f - b) - (d - b)(e - a)这个式子来计算这两条线段是否共线(也就是在同一条线上)。如果这个式子的结果:
2017_09_20_111209
为了展示了Java 浮点计算中误差是如何产生的考虑使用表3-3中a~f的值定义3个点。
表3-3:浮点算术误差
2017_09_20_111242
可以很明显地看出,这p0、p1、p2三个点其实是共线的,而且直线方程是y = 5*x。当使用浮点数计算判断线段的共线性时,浮点运算中的固有误差影响了浮点运算的结果。使用32位单精度浮点数的时候,计算结果是0.00048828125。而使用双精度浮点数(64位),计算出来的结果却是一个很小的负数!这个例子生动地展现了无论是32位还是64位浮点数,它们都无法准确地表示计算出实际的数值,因此无法确定这两条线段是否共线。这就是浮点世界的常态。
常见的一种解决办法是引入一个非常小的值δ,来决定两个浮点数是否存在≌(近似相等)关系。如果|x - y|<δ,那么认为x和y是相等的。但是,即便这样,如果存在x≌y和y≌z,但是x≌z可能并不为真。这不但违背了数学运算的传递性,而且增加了编写正确代码的难度。而且这种办法并没有解决共线性问题,因为共线性问题的确定用的是值的符号(0,正,负)而不是相等与否。

相关文章
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
40 2
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
22 1
|
13天前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
39 1
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
27 1
|
13天前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
29 0
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
48 0
|
13天前
|
存储 机器学习/深度学习 人工智能
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(下)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(下)
34 0
|
8天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
5天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。