误差来源

本文详细解析了浮点数计算中常见的误差来源,包括表示误差、数据误差和过程误差,并讨论了如何通过设计系统和编写代码来减小这些误差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

13.6  相等判断

与整型数不同,浮点数是有精度限制的。数学上的同一个值由于来源不同,计算过程不同,精度也不同,一般不会严格相等。

13.6.1  误差来源

一般而言,浮点计算中存在下列误差来源:

(1)表示误差

在第5章中已经说明,浮点数实际上是用一个有限序列逼近数的方式来表示数值的。对某些数而言,这种方式无法绝对准确地表示它的值,例如1.4使用float表示是1.3999999,有近 的误差(float的有效数字是7位)。这种误差来自浮点数的定义,是不可避免的,但可以通过使用更高精度的格式来减小。例如,1.4使用double表示是1.3999999999999999,误差降为 (double的有效数字是15位)。

更详细的解释参阅第5章。

(2)数据误差

计算中不可避免地会使用不同来源的数据,这些数据有不同的精度。例如,一辆汽车的速度用GPS设备测量和用红外测速仪测量,结果是不同的。即使是数学常数,不同的来源也有不同的精度。例如 ,自己编写代码时可能定义为:

#define PI    3.1415926

而浮点库可能使用的是3.1415926535897932。在这种情况下,同一个sin(PI/2.0)将有不同的结果。

小心地设计系统、编写代码可以减小这种数据误差,但无法根除它。测量数据的误差来自测量设备和测量过程,是必然存在的。即使是上述 那种人为引入的误差也极难根除,因为没有人知道所使用的浮点库、浮点硬件或其他什么代码使用了不同的数学常量。

(3)过程误差

类似不同的测量设备和测量过程产生不同精度的数据,不同的计算过程也会导致结果有不同的精度。例如,在同样的初值条件下解算同一个微分方程,如果使用不同的步长(积分循环次数将不同)或不同的积分公式(例如Runge_Kutta公式常用的就有二阶和四阶两种),得到的结果也有差异。

这种误差的控制和减小要复杂得多,需要使用计算数学方面的理论和具体的算法分析。

### ADC误差来源 ADC(模数转换器)的误差主要来源于多个方面,这些误差会影响其转换精度。以下是一些常见误差及其成因: 1. **偏移误差 (Offset Error)** 偏移误差是指当输入信号为零伏特时,输出并非理想情况下的零值。这是由于ADC内部电路中的失调电压引起的[^1]。 2. **增益误差 (Gain Error)** 增益误差表示实际斜率与理想斜率之间的偏差。它通常由放大器或比较器的不精确性引起,导致整个量程范围内的线性度受到影响。 3. **非线性误差 (Non-Linearity Errors)** 非线性误差分为差分非线性和积分非线性两种形式: - 差分非线性误差 (DNL): 表示相邻两个码字之间步长的变化程度。如果某个步长大于1 LSB,则可能导致丢失码现象。 - 积分非线性误差 (INL): 反映的是整体传输函数偏离理想直线的程度。这通常是制造工艺上的缺陷所致[^4]。 4. **量化误差 (Quantization Error)** 量化过程本身就会引入一定的不确定性,因为连续模拟信号被离散化处理后无法完全再现原始波形细节[^2]。 5. **热噪声和其他随机干扰** 温度变化会对半导体器件特性造成影响从而带来额外漂移;同时外部电磁场也可能耦合进入系统形成不必要的扰动源[^2]。 --- ### 解决方案 针对以上提到的各种类型的错误,有如下几种通用的技术手段来改善性能表现: #### 校准技术 通过软件算法实现自动补偿机制能够有效减小静态参数失配带来的负面影响。例如对于偏置项可以通过存储预设修正系数的方式在线调整读数值使其更加接近真实物理量级[^1]。 ```c // 示例代码展示简单的数字域校正逻辑 float applyCalibration(float rawValue, float offsetCorrection, float gainFactor){ return (rawValue * gainFactor) + offsetCorrection; } ``` #### 提升硬件设计质量 选用更高规格等级的产品组件有助于降低初始公差范围并增强长期稳定性。另外合理布局PCB走线结构以及屏蔽敏感区域也是防止外界杂讯侵入的有效措施之一[^3]。 #### 数据平滑滤波 采用低通数字滤波器去除高频成分部分可显著削弱短期波动幅度进而提升最终结果可靠性。下面给出了一种基于一阶IIR模型的例子: ```python def iir_lowpass_filter(input_value, previous_output, alpha=0.9): """Simple IIR low-pass filter implementation.""" output = alpha * previous_output + (1 - alpha) * input_value return output ``` #### 使用更先进的架构类型 某些特定应用场景下考虑改用其他原理工作的变换设备也许能从根本上规避传统方式存在的局限之处。比如VCO-Based ADC虽然存在固有的非线性难题但经过精心优化同样能达到令人满意的指标水平[^4]。 --- ### 总结 综上所述,要克服ADC中存在的各类潜在问题需要综合运用多种途径相结合的方法论来进行全方位考量规划实施改进计划才能取得最佳成效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值