= (eşitlik) ve <> (eşitsizlik) karşılaştırma operatörlerinin REAL veya LREAL
Gerekçe: REAL/LREAL değerleri IEEE 754 standardına göre kayan noktalı sayılar olarak uygulanır. Bu standart,
belirli, görünüşte basit ondalık sayıların hassasiyetle temsil edilemeyeceğini ima
eder. Sonuç olarak, aynı ondalık sayı için LREAL şeklinde farklı gösterimler olabilir.
Aşağıdaki kod satırlarını göz önünde bulundurun:
lr11 := 1.1; lr33 := 3.3; lrVar1 := lr11 + lr11; lrVar2 := lr33 - lr11; botest := lrVar1 = lrVar2;
Bu durumda, lrVar1 ve lrVar2 değişkenlerinin her ikisi de 2,2 izleme değerini döndürse bile botest, FALSE döndürür. Bu derleyicinin bir hatası değil, tüm geleneksel işlemcilerin kayan nokta
birimlerinin bir özelliğidir. Değerlerin farklı olabileceği minimum bir değer belirterek
bunu önleyebilirsiniz: botest := ABS(lrVar1 - lrVar2) < 0.1;
İstisna: Bu analizde 0.0 ile bir karşılaştırma rapor edilmemiştir. 0 için IEEE 754 standardında tam bir gösterim
vardır ve bu nedenle karşılaştırma beklendiği gibi normal şekilde çalışır. Bu nedenle,
daha iyi performans için, burada doğrudan bir karşılaştırmaya izin vermek mantıklıdır.
Önemliymiş: Yüksek
PLCopen kuralı: CP54
Örnek
PROGRAM PLC_PRG VAR rTest1 : REAL; rTest2 : REAL; lrTest3 : LREAL; lrTest4 : LREAL; xResult : BOOL; END_VAR //the following lines each will cause an SA0054: xResult := rTest1 = rTest1; xResult := rTest1 = rTest2; xResult := rTest1 <> rTest2; xResult := lrTest3 = lrTest3; xResult := lrTest3 = lrTest4; xResult := lrTest3 <> lrTest4; //the following lines each will not cause an SA0054: xResult := rTest1 > rTest2; xResult := lrTest3 < lrTest4; --> SA0054: Comparisons of REAL/LREAL for equality / inequality
Ayrıca bakınız