부동 소수점 값
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에 가깝습니다. 대부분의 연산에서 이처럼 극히 작은 부정확도는 중요하지 않습니다. 다른 관점에서, 부동 소수점 값을 아날로그 출력 모듈로 보내는 경우, 모듈로 전달되는 출력 전압에는 0.000038%의 차이가 전혀 발생하지 않습니다.
부동 소수점 수학 연산에 대한 지침
다음 지침을 따르십시오.
특정 부동 소수점 수학 연산을 수행하는 경우 반올림 오차로 인해 정밀도가 손실될 수 있습니다. 부동 소수점 프로세서에는 결과 값에 영향을 미칠 수 있는 자체적인 내부 정밀도가 있습니다.
금액 값이나 계산기 기능에는 부동 소수점 연산을 사용하지 마십시오. INT 또는 DINT 값을 사용하여 값을 스케일링하고 소수점 위치를 직접 관리하십시오. 예를 들어, 달러에 하나의 INT 또는 DINT 값을 사용하고, 센트에 별도의 INT 또는 DINT 값을 사용할 수 있습니다.
부동 소수점 수를 비교하지 마십시오. 대신 값이 일정 범위 내에 있는지 확인하십시오. 이를 위해 LIMIT 명령어가 특별히 제공됩니다.
계산기 예제
REAL 데이터 유형의 정밀도는 누적 계산 응용 프로그램에 영향을 미치므로 매우 큰 숫자에 매우 작은 숫자를 더할 때 오차가 발생할 수 있습니다.
예를 들어, 일정 기간 동안 어떤 숫자에 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; // there might be a tiny remainder
- }
의견을 작성 부탁드립니다.