| |
|
|
p.specht
| Die Gammafunktion ist bekanntlich unter vielen anderen Eigenschaften die kontinuierliche Variante der Faktoriellenfunktion - z.B. ist Facto(5)=5*4*3*2*1. Die Gammafunktion Gamma(x+1) sollte bei ganzzahligem reellen Input das selbe Ergebnis liefern wie Facto(x), und damit eine (differenzierbare) Formel für die Kurvenform der Faktoriellenfunktion liefern. Das klappt aber bisher nicht so richtig: Zahlreiche berühmte Näherungen existieren. Diese stammt aus 2007 und wird im nachstehenden Programm ausgetestet und ihre absolute Abweichung ermittelt.
WindowTitle " Test der Gammafunktions-Näherung nach [G.Nemes 2007]"
WindowStyle 24:Window 0,0-800,%maxy-40:font 2
'https://en.wikipedia.org/wiki/Stirling%27s_approximation#A_convergent_version_of_Stirling's_formula
proc GammaNemes :parameters z!
case z!<1/1e4:return 0:if z!>168:print " *** OVERFLOW ERROR ***":return 0:endif
var uz!=1/z!
return Sqrt(6.2831853071795865*uz!)*(.367879441171442322*(z!+1/(12*z!-.1*uz!)))^z!
endproc
proc Facto :parameters x&
case x&<1:return 0
if x&>168:print " *** OVERFLOW ERROR ***":return 0:endif
var p!=1
whileloop x&,1,-1
p!=p!*&Loop
endwhile
return p!
Endproc
'Main part
Declare gamma!
CLS:set("decimals",4)
Whileloop 180
gamma!=GammaNemes(&Loop+1)
Print:print " ",&Loop,
print format$("%g",Facto(&Loop)),
print format$("%g",round(gamma!,4)),
print " AbsErr: ";format$("%g",gamma!-Facto(&Loop))
waitinput 8000
case %csrlin>34:cls
endwhile
print "---"
waitinput
End
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 30.05.2021 ▲ |
|
|
|