浮点值
Logix 控制器根据 IEEE 754 浮点算术标准处理浮点值。该标准规定了浮点数的存储和计算方法。IEEE 754 浮点算术标准的设计目的是以合理的存储空间提供速度,并能够处理非常大的数值。
REAL 标签存储单精度规格化浮点数。
LREAL 标签存储双精度规格化浮点数。
控制器支持以下基本数据类型:
- REAL
- LREAL
非规格化数值和 -0.0 被视为 0.0
如果计算结果为 NAN 值,则符号位可以为正或负。这种情况下,软件显示 1#.NAN,没有符号。
并非所有十进制数值都能以这种标准格式准确表示,可能会造成精度损失。例如,10.1 减去 10,结果应为 0.1。在 Logix 控制器中,结果可能是 0.10000038。在本例中,0.1 与 0.10000038 相差 0.000038%,近似为零。对大多数运算而言,这种微小的不精确性并不重要。举例来说,如果将一个浮点值发送给一个模拟量输出模块,与发送一个只相差 0.000038% 的值相比,输出电压不会有任何差异。
浮点算术运算法则
运算法则如下:
执行某些浮点算术运算时,可能会因四舍五入误差而造成精度损失。浮点处理器的内在精度会影响结果值。
不应对金额或累加器函数使用浮点运算。应使用 INT 或 DINT 值,放大数值并跟踪小数位(或者对美元使用一个 INT 或 DINT 值,对美分使用另一个 INT 或 DINT 值)。
不应比较浮点数。但可以检查数值是否在某个范围内。LIMIT 指令专用于此用途。
累加器示例
REAL 数据类型的精度会影响累加运算。在将超小数与超大数相加时,将出现误差。
例如,在一段时间内持续给某个数值加 1。当累加和远大于 1 时,继续加 1 将不再对结果产生任何影响,这是因为位数不足以存储完整结果。此时加法运算会存储尽可能多的高位部分,而丢弃剩余的低位部分。
为解决这个问题,可先累加小数值,直到获得较大结果。然后将结果传输到其他位置,进行进一步的大数值运算。例如:
- x 为小增量变量。
- y 为大增量变量。
- z 为可在任何位置使用的当前总计数。
- x = x+1;
- if x = 100,000;
- {
- y = y + 100,000;
- x = 0;
- }
- z = y + x;
另一个示例:
- x = x + some_tiny_number;
- if (x >= 100)
- {
- z = z + 100;
- x = x - 100; // 可能会有极小的余数
- }
提供反馈