2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
53
Task/Benfords-law/Pascal/benfords-law.pascal
Normal file
53
Task/Benfords-law/Pascal/benfords-law.pascal
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
program fibFirstdigit;
|
||||
{$IFDEF FPC}{$MODE Delphi}{$ELSE}{$APPTYPE CONSOLE}{$ENDIF}
|
||||
uses
|
||||
sysutils;
|
||||
type
|
||||
tDigitCount = array[0..9] of LongInt;
|
||||
var
|
||||
s: Ansistring;
|
||||
dgtCnt,
|
||||
expectedCnt : tDigitCount;
|
||||
|
||||
procedure GetFirstDigitFibonacci(var dgtCnt:tDigitCount;n:LongInt=1000);
|
||||
//summing up only the first 9 digits
|
||||
//n = 1000 -> difference to first 9 digits complete fib < 100 == 2 digits
|
||||
var
|
||||
a,b,c : LongWord;//about 9.6 decimals
|
||||
Begin
|
||||
for a in dgtCnt do dgtCnt[a] := 0;
|
||||
a := 0;b := 1;
|
||||
while n > 0 do
|
||||
Begin
|
||||
c := a+b;
|
||||
//overflow? round and divide by base 10
|
||||
IF c < a then
|
||||
Begin a := (a+5) div 10;b := (b+5) div 10;c := a+b;end;
|
||||
a := b;b := c;
|
||||
s := IntToStr(a);inc(dgtCnt[Ord(s[1])-Ord('0')]);
|
||||
dec(n);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure InitExpected(var dgtCnt:tDigitCount;n:LongInt=1000);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 1 to 9 do
|
||||
dgtCnt[i] := trunc(n*ln(1 + 1 / i)/ln(10));
|
||||
end;
|
||||
|
||||
var
|
||||
reldiff: double;
|
||||
i,cnt: integer;
|
||||
begin
|
||||
cnt := 1000;
|
||||
InitExpected(expectedCnt,cnt);
|
||||
GetFirstDigitFibonacci(dgtCnt,cnt);
|
||||
writeln('Digit count expected rel diff');
|
||||
For i := 1 to 9 do
|
||||
Begin
|
||||
reldiff := 100*(expectedCnt[i]-dgtCnt[i])/expectedCnt[i];
|
||||
writeln(i:5,dgtCnt[i]:7,expectedCnt[i]:10,reldiff:10:5,' %');
|
||||
end;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue