Pathological floating point problems: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(Added XPL0 example.) |
||
Line 4,582: | Line 4,582: | ||
f(77617.0, 33096.0) is -0.8273960599468214 |
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> |
</pre> |
||