Pathological floating point problems: Difference between revisions

Added XPL0 example.
m (syntax highlighting fixup automation)
(Added XPL0 example.)
Line 4,582:
 
f(77617.0, 33096.0) is -0.8273960599468214
</pre>
 
=={{header|XPL0}}==
This shows the results from the IEEE 754 double precision (64-bit) FPU
built into the Raspberry Pi 4. Identical results were obtained from
EXPL-32 on an Intel Inspiron. A Duron 850 gave identical results for the
first task, but the second task diverged to positive values after 17
years. The Duron also gave a large positive value for the third task.
<syntaxhighlight lang "XPL0">func real F(A, B);
real A, B;
return 333.75*Pow(B,6.) +
A*A*(11.*A*A*B*B - Pow(B,6.) - 121.*Pow(B,4.) - 2.) +
5.5*Pow(B,8.) + A/(2.*B);
 
real V1, V2, V3, Bal;
int N, Year;
[V1:= 2.; V2:= -4.; \task 1
for N:= 3 to 100 do
[V3:= 111. - 1130./V2 + 3000./(V1*V2);
case N of
3,4,5,6,7,8,20,30,50,100:
[Format(3, 0); RlOut(0, float(N));
Format(5, 16); RlOut(0, V3); CrLf(0);
]
other [];
V1:= V2; V2:= V3;
];
CrLf(0); \task 2
Bal:= Exp(1.) - 1.;
for Year:= 1 to 25 do
[Bal:= Bal*float(Year) - 1.;
Format(2, 0); RlOut(0, float(Year));
Format(12, 16); RlOut(0, Bal); CrLf(0);
];
CrLf(0); \task 3
RlOut(0, F(77617., 33096.));
CrLf(0);
]</syntaxhighlight>
{{out}}
<pre>
3 18.5000000000000000
4 9.3783783783783800
5 7.8011527377521700
6 7.1544144809753300
7 6.8067847369248100
8 6.5926327687217900
20 98.3495031221654000
30 99.9999999999989000
50 100.0000000000000000
100 100.0000000000000000
 
1 0.7182818284590450
2 0.4365636569180900
3 0.3096909707542710
4 0.2387638830170820
5 0.1938194150854110
6 0.1629164905124650
7 0.1404154335872580
8 0.1233234686980610
9 0.1099112182825480
10 0.0991121828254790
11 0.0902340110802700
12 0.0828081329632370
13 0.0765057285220790
14 0.0710801993091080
15 0.0662029896366220
16 0.0592478341859530
17 0.0072131811612050
18 -0.8701627390983050
19 -17.5330920428678000
20 -351.6618408573560000
21 -7385.8986580044700000
22 -162490.7704760980000000
23 -3737288.7209502600000000
24 -89694930.3028063000000000
25 -2242373258.5701600000000000
 
-1180591620717410000000.0000000000000000
</pre>
 
298

edits