code 35027;
procedure FRESNEL(X, C, S); value X; real X, C, S;
begin real ABSX, X3, X4, A, P, Q, F, G, C1, S1;
ABSX:= ABS(X);
if ABSX <= 1.2 then
begin A:= X * X; X3:= A * X; X4:= A * A;
P:= (((5.47711 38568 2687"-6 * X4 - 5.28079 65137 2623"-4)
* X4 + 1.76193 95254 3491"-2) * X4 - 1.99460 89882 6184"-1)
* X4 + 1;
Q:= (((1.18938 90142 2876"-7 * X4 + 1.55237 88527 6994"-5)
* X4 + 1.09957 21502 5642"-3) * X4 + 4.72792 11201 0453"-2)
* X4 + 1;
C:= X * P / Q;
P:= (((6.71748 46662 5141"-7 * X4 - 8.45557 28435 2777"-5)
* X4 + 3.87782 12346 3683"-3) * X4 - 7.07489 91514 4523"-2)
* X4 + 5.23598 77559 8299"-1;
Q:= (((5.95281 22767 8410"-8 * X4 + 9.62690 87593 9034"-6)
* X4 + 8.17091 94215 2134"-4) * X4 + 4.11223 15114 2384"-2)
* X4 + 1;
S:= X3 * P / Q
end else
if ABSX <= 1.6 then
begin A:= X * X; X3:= A * X; X4:= A * A;
P:=((((-5.68293 31012 1871"-8 * X4 + 1.02365 43505 6106"-5)
* X4 - 6.71376 03469 4922"-4) * X4 + 1.91870 27943 1747"-2)
* X4 - 2.07073 36033 5324"-1) * X4 + 1.00000 00000 0111"+0;
Q:=((((4.41701 37406 5010"-10 * X4 + 8.77945 37789 2369"-8)
* X4 + 1.01344 63086 6749"-5) * X4 + 7.88905 24505 2360"-4)
* X4 + 3.96667 49695 2323"-2) * X4 + 1;
C:= X * P / Q;
P:=((((-5.76765 81559 3089"-9 * X4 + 1.28531 04374 2725"-6)
* X4 - 1.09540 02391 1435"-4) * X4 + 4.30730 52650 4367"-3)
* X4 - 7.37766 91401 0191"-2) * X4 + 5.23598 77559 8344"-1;
Q:=((((2.05539 12445 8580"-10 * X4 + 5.03090 58124 6612"-8)
* X4 + 6.87086 26571 8620"-6) * X4 + 6.18224 62019 5473"-4)
* X4 + 3.53398 34276 7472"-2) * X4 + 1;
S:= X3 * P / Q
end else
if ABSX < "15 then
begin FG(X, F, G);
A:= X * X;
A:= (A - ENTIER(A / 4) * 4) * 1.57079 63267 9490;
C1:= COS(A); S1:= SIN(A);
A:= if X < 0 then -0.5 else 0.5;
C:= F * S1 - G * C1 + A;
S:= -F * C1 - G * S1 + A
end else C:= S:= SIGN(X) * 0.5
end FRESNEL;
eop