《算法技术手册》一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,正,负)而不是相等与否。

相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
52 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
33 1
|
1月前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
48 1
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
40 1
|
1月前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
37 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
61 0
|
1月前
|
存储 机器学习/深度学习 人工智能
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(下)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(下)
50 0
|
1月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
8天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
16天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
下一篇
无影云桌面