Floating point types

This test case it part of the test suite proposed for new devices.

Test case ID: R0295
Language: ST

Code:
tests2/t0295.st

(* floating point *)


FUNCTION F_R0295 : REAL // just a floating point division
    VAR_INPUT    i,j : INT ;    END_VAR
    F_R0295 := INT_TO_REAL(i)/INT_TO_REAL(j);
END_FUNCTION

PROGRAM R0295
    VAR    
        f1,f2,f3 : REAL;
        d1,d2 : LREAL;
    END_VAR

    d1 :=  LREAL#1.0E-6;
    d1 :=  LREAL#0.5E6 * d1;
    f1 :=  F_R0295(3,10000);
    d2 := 1000.0;
    f2 :=  F_R0295(6,100)+ LREAL_TO_REAL(d2);
    d2 := f2; // no conversion necessary from REAL to LREAL
    d2 := d2 * d2;
    f3 := F_R0295(6,0); // floating point division by zero is well behaved

_GEB_ASSERT_EQDOUBLE_(d1 , 0.5);
_GEB_ASSERT_EQDOUBLE_(d2 , 1.00012e+06);
_GEB_ASSERT_EQFLOAT_(f1 , 3.0e-04);
_GEB_ASSERT_EQFLOAT_(f2 , 1000.06);
_GEB_ASSERT_EQFLOAT_(f3 , 1.0/0.0);
    
END_PROGRAM