学习笔记 – C语言 | 每日基础(82)

读者:为什么浮点计算程序表现奇怪, 在不同的机器上给出不同的结果?

阿一:电脑一般都是用一种浮点的格式来 近似的模拟实数的运算, 注意是近似, 不是完全。下溢、误差的累积和其它非常规 性是常遇到的麻烦。不要假设浮点运算结果是精确的, 特别是别假设两个浮点值可以进行等价比 较。也不要随意的引入 “模糊因素”。这并不是C语言特有的问题, 其它电脑语言有一样的问题。浮点的某些方面被通 常定义为“中央处理器是这样做的”, 否则在一个没有“正 确” 浮点模型的处理器上, 编译器要被迫做代价非凡的仿真。

读者:有什么好的方法来验对浮点数在 “足够接近” 情况下的等值?

阿一:浮点数的定义决定它的绝对精确度会随着其代表的值变化, 所以比较两个浮 点数的最好方法就要利用一个精确的阈值。这个阈值和作比较的浮点数值大小有关。

正文完