1! virhe pros=7.78629909
2! virhe pros=4.04978242
4! virhe pros=2.05760361
8! virhe pros=1.03572555
16! virhe pros=0.51941195
32! virhe pros=0.26006942
64! virhe pros=0.13012254
128! virhe pros=0.06508284
256! virhe pros=0.03254676
512! virhe pros=0.01627471
1024! virhe pros=0.00813768
2048! virhe pros=0.00406892
4096! virhe pros=0.00203448
8192! virhe pros=0.00101724
16384! virhe pros=0.00050862
Näyttää siis siltä, että prosentuaalinen virhe pienenee kun n kasvaa, mutta koska kertymäfunktio kasvaa niin tuhottoman nopeasti, absoluuttinen virhe on merkittävän suuri isoilla arvoilla.
Koodi: Valitse kaikki
program KertymaTutkimuksia;
uses bigdecimalmath, sysutils;
var n: LongInt;
k,Stirling,e,Pii,virhe: BigDecimal;
str: array [1..10] of char;
function kertoma(luku: LongInt):Bigdecimal;
var i: LongInt;
tulos: BigDecimal;
begin
tulos:=1;
i:=2;
while i<=luku do
begin
tulos:=tulos*i;
i:=i+1;
end;
kertoma:=tulos;
end;
begin
e:=2.71828182845904523536;
Pii:=3.14159265358979323846;
n:=1;
while (n<=20000) do
begin
k:=kertoma(n);
Stirling:=sqrt(2*Pii*n)*Power((n/e),n);
virhe:=100*(k-Stirling)/k;
str:=BigDecimalToStr(virhe);
writeln(n:3,'! virhe pros=', str);
n:=n*2;
end;
end.