Common attributes for Motion instructions 
 
  Rockwell Automation Publication MOTION-RM002H-EN-P-February 2018  665 
Not all decimal values can be exactly represented in this standard format, which 
results in a loss of precision. For example, if you subtract 10 from 10.1, you expect 
the result to be 0.1. In a Logix controller, the result could very well be 0.10000038. 
In this example, the difference between 0.1 and 0.10000038 is .000038%, or 
practically zero. For most operations, this small inaccuracy is insignificant. To put 
things in perspective, if you were sending a floating point value to an analog 
output module, there would be no difference in the output voltage for a value 
being sent to the module that differs by .000038%.   
Guidelines for Floating-point Math Operations 
Follow these guidelines: 
When performing certain floating-point math operations, there may be a loss of 
precision due to rounding error. Floating-point processors have their own internal 
precision that can impact resultant values. 
Do not use floating point math for money values or for totalizer functions. Use 
INT or DINT values, scale the values up, and keep track of the decimal place (or 
use one INT or DINT value for dollars, and a second INT or DINT value for 
cents). 
Do not compare floating-point numbers. Instead, check for values within a range. 
The LIM instruction is provided specifically for this purpose. 
Totalizer Examples 
The precision of the REAL data type affects totalization applications such that 
errors occur when adding very small numbers to very large numbers. 
For example, add 1 to a number over a period of time. At some point the add will 
no longer affect the result because the running sum is much greater than 1, and 
there are not enough bits to store the entire result. The add stores as many upper 
bits as possible and discards the remaining lower bits. 
To work around this, do math on small numbers until the results get large. Then, 
transfer them to another location for additional large-number math. For example: 
•  x is the small incremented variable. 
•  y is the large incremented variable. 
•  z is the total current count that can be used anywhere. 
•  x = x+1; 
•  if x = 100,000; 
•  { 
•  y = y + 100,000;