Zitat von
alzaimar:
Zitat von
gammatester:
Noch mehr unreflektierter und ungetesteter Blödsinn...
...es in der Praxis kein Schwein interessiert...
Das ist kein guter Stil und zudem unhöflich, also überflüssig. Es reicht doch vollkommen aus, Fehler in der Argumentation aufzudecken, zumal sie so offensichtlich sind.
Wolfgang, deine Ignoranz bezüglich meiner und anderer Einwände untermauert das Vorurteil vom beratungsresistenden Lehrer, der irrigerweise meint, über jede Kritik erhaben zu sein: Du bist bisher auf keinen einzigen Einwand eingegangen. Das ist beschämend und eines Akademikers unwürdig. Oder solltest Du dich am Ende mit Federn schmücken, die nicht Deine eigenen sind?
OK, nehm ich zurück: Ersetze "Blödsinn" durch "falsche Behauptungen". Bei der anderen Aussage wiederhole ich, was ich in #12 gesagt habe: "IsPowerOfN ist mE überflüssig, weil sie in der Praxis eigentlich keiner braucht."
Leider wird, wie schon angemerkt, auf die eigentlichen Probleme nicht eingegangen: Auch wenn die Fehler in bisherigen Funktionen beseitigt würden, bleiben ernste Schwierigkeiten (und OldGrumpys Bauchweh). Selbst mit den einfachsten (exakten) Zahlen number und base, gibt es falsche Ergebnisse. Ein Problem mit frac ist, das der Test voll daneben geht, sobald logn minimal kleiner als ein Integer ist. Dann ist frac nahe bei 1, es ist völlig egal, ob man mit IsZero oder abs() < epsilon testet. Beispiel zum Finden von solchen Werten
Delphi-Quellcode:
program mixbug;
{$apptype console}
uses math;
var
a: extended;
i,j: integer;
n,b: longint;
begin
for j:=1 to 2 do begin
if j=1 then writeln('IsPowerOfN-Fehler mit ln(n)/ln(b)')
else writeln('IsPowerOfN-Fehler mit math.logn');
for b:=2 to 50 do begin
n := b;
i := 1;
while n <= MaxLongint div b do begin
inc(i);
n := n * b;
if j=1 then a := ln(n)/ln(b)
else a := logn(b, n);
if abs(frac(a)) > 0.5 then begin
writeln(b:3, n:12, a:15:10, ' ', a-i:20, frac(a):15:10);
end;
end;
end;
end;
end.
und die Ergebnisse
Code:
IsPowerOfN-Fehler mit ln(n)/ln(b)
02 128 7.0000000000 -4.33680868994E-0019 1.0000000000
02 16384 14.0000000000 -8.67361737988E-0019 1.0000000000
02 33554432 25.0000000000 -1.73472347598E-0018 1.0000000000
02 268435456 28.0000000000 -1.73472347598E-0018 1.0000000000
04 16384 7.0000000000 -4.33680868994E-0019 1.0000000000
04 268435456 14.0000000000 -8.67361737988E-0019 1.0000000000
07 16807 5.0000000000 -4.33680868994E-0019 1.0000000000
07 823543 7.0000000000 -4.33680868994E-0019 1.0000000000
07 282475249 10.0000000000 -8.67361737988E-0019 1.0000000000
12 35831808 7.0000000000 -4.33680868994E-0019 1.0000000000
14 105413504 7.0000000000 -4.33680868994E-0019 1.0000000000
15 3375 3.0000000000 -2.16840434497E-0019 1.0000000000
15 11390625 6.0000000000 -4.33680868994E-0019 1.0000000000
16 268435456 7.0000000000 -4.33680868994E-0019 1.0000000000
33 39135393 5.0000000000 -4.33680868994E-0019 1.0000000000
35 42875 3.0000000000 -2.16840434497E-0019 1.0000000000
35 1838265625 6.0000000000 -4.33680868994E-0019 1.0000000000
41 68921 3.0000000000 -2.16840434497E-0019 1.0000000000
41 115856201 5.0000000000 -4.33680868994E-0019 1.0000000000
46 205962976 5.0000000000 -4.33680868994E-0019 1.0000000000
47 103823 3.0000000000 -2.16840434497E-0019 1.0000000000
48 110592 3.0000000000 -2.16840434497E-0019 1.0000000000
49 282475249 5.0000000000 -4.33680868994E-0019 1.0000000000
IsPowerOfN-Fehler mit math.logn
07 823543 7.0000000000 -4.33680868994E-0019 1.0000000000
17 4913 3.0000000000 -2.16840434497E-0019 1.0000000000
17 1419857 5.0000000000 -4.33680868994E-0019 1.0000000000
17 24137569 6.0000000000 -4.33680868994E-0019 1.0000000000
17 410338673 7.0000000000 -4.33680868994E-0019 1.0000000000
34 39304 3.0000000000 -2.16840434497E-0019 1.0000000000
34 45435424 5.0000000000 -4.33680868994E-0019 1.0000000000
34 1544804416 6.0000000000 -4.33680868994E-0019 1.0000000000
35 42875 3.0000000000 -2.16840434497E-0019 1.0000000000
35 1838265625 6.0000000000 -4.33680868994E-0019 1.0000000000