Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
188to192
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
188to192
188to192
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Log

Log
08.12.2002 21:11:46
Wolfgang
wo ist der Unterschied zwischen 1.) und 2.) ??
bei 1.) ist das Ergebnis 4, bei 2.) 8

1.) a = 2 ^ Fix(Log(8) / Log(2))

2.) b = Fix(Log(8) / Log(2))
a = 2 ^ b

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Es bringt nichts ein neuen Thread zu eröffnen...
08.12.2002 21:16:38
Ramses
Dein Ergebnis ist nicht nachvollziehbar:

sowohl in der Tabelle wie auch im Direktfenster erscheint bei mir das korrekte Ergebnis

b = Fix(Log(8) / Log(2)) = 3

Gruss Rainer

Re: Log
08.12.2002 21:19:19
Hajo
Hallo Wolfgang

warum ein neuer Beitrag. Die Übersicht geht dadurch verloren.
Das keiner mehr geantwortet hat liegt wohl auch daran das keiner eine Antwort hat. Selbst Rainer konnte keinen Grund finden. Ich hatte mich ein wenig verlaufen da ich gedacht habe es handelt sich um Formeln in der Tabelle. Mir ist nur aufgefallen wird auf Int verzichtet kommt bei beiden das gleiche Ergebnis raus. Einen Grund für die Unterschiedlichen Egebnisse habe ich leider auch nicht. Obwohl es logisch ist das bei beiden das gleiche Ergebnis rauskonmmen müßte.

Gruß Hajo

Anzeige
Re: Log
08.12.2002 21:46:15
Wolfgang
Tschuldigung, bin Anfänger bei Herbers Forum, hab mich
etwas verlaufen.
Dieser Fehler hat bei einigen Anwendungen aber wohl
weitreichende Folgen.
Bei folgenden 2er-Potenzen tritt der Fehler bei mir auf:
8, 64, 128

Gruß Wolfgang

Re: Es bringt nichts ein neuen Thread zu eröffnen...
08.12.2002 22:16:33
M. Kuhn
Moin Männer,

scheinbar schwieriger Fall, aber lösbar. Ich will versuchen, es zu erklären:

Schaut man sich das Konstrukt Fix(Log (8) / Log(0)) an, so stellt man fest, dass es die Fix-Fkt. schwer hat: Bei Log(0) wird der Ganzzahl-Anteil vor der Division 0! Das geht dann schief ... Da also diese innere Klammer unter der Fix-Fkt. einen Fehler ergäbe (DIV/0!), gibt Fix den Wert 2 (Log(8)) zurück - 2^2 = 4. Die Teilung von Log(8) / Log(2) ergibt mathematisch korrekt 3, also 2^3=8.
Nun darf man nicht zu hart mit der Fix-Fkt. richten, denn in der Hilfe (zu Fkt. allg.) findet man den Hinweis, Funktionen mit *Werten* rechnen zu lassen (ja, auch ByVal gehört dazu). Also: 2 ^ Fix([Log(8) / Log(2)]) = 8. (eckige Klammer!)

Noch einen schönen 2. Advent und einen Dank an all jene, die hier Ihre Zeit opfern - MfG Mario


Anzeige
Re: Log
08.12.2002 22:35:46
Hans W. Hofmann
Sieht nach einen Fehler in der Typenwandlung Integer <> Double aus. Ein richtiger Compiler hätte auch einen Type Mismatch gemeldet. Double = Integer


Was haste denn für a, b vereinbart?
Wenn Dim a as Integer, denn stimmts auch...

Gruß HW

Herzlichen Dank, aber...
08.12.2002 23:17:45
Ramses
Hallo Mario,

Vielen Dank für die Erklärung.
Die ist soweit logisch, wenn 0 eingesetzt wird.

Aber die Funktion FIX() sollte doch den Ganzzahligen Wert aus der Division LOG(8)/LOG(2) ( = 0.903089987/0.301029996
) zurückgeben.
Wenn ich deiner Erklärung folge, dürfte dann noch nicht mal 4 herauskommen, da der LOG(8) = 0.903089987 und mit der Funktion FIX() der Ganzzahlige Anteil doch eigentlich 0 ist.
Das Ergebnis der gesamten Berechnung müsste demnach 0 sein.
2^0 = 0.
Warum bei dieser Formel in EXCEL allerdings 1 herauskommt, kapiere ich momentan noch nicht :-)

Sollte ich da war falsch verstanden haben, würde ich mich freuen nochmals eine Erklärung zu erhalten.

Herzliche Grüsse
Rainer



Anzeige
Re: Herzlichen Dank, aber...
09.12.2002 10:29:42
M. Kuhn
Moin Rainer,

folgende Ausgangsbasis (Für VBA!!):
Die Fkt. Log(x) berechnet den *natürlichen* Logarithmus einer Zahl x zur Basis e (Eulersche Zahl); also Excel-Log(8) = (Math-ln(8) = 2,07944154167984.
Der von Dir genannte Wert ist der dekadische Logarithmus (Basis 10). Wenn Du den brauchst, musst Du eine auf dem ln(x) aufbauende Fkt. benutzen: Logn(x) = Log(x) / Log(n) (Erklärung: Den Logarithmus zur Basis n für jede Zahl x kann man berechnen, indem man den natürlichen Logarithmus von x durch den natürlichen Logarithmus von n dividiert). Also:

Static Function Log10(X) ' dek. Log. ermitteln
Log10 = Log(X) / Log(10#)
End Function

Noch ein Sachverhalt: 2^0 ist per definitionem = 1. (Man denke an das LSB!)

Für Formeln innerhalb Excel sieht es etwas anders aus:

Hier stehen die Fkt. Log(x) = dek. Log. sowie Ln(x) = nat. Log. direkt zur Verfügung. Allerdings rechnet Excel sehr wohl exakt: Log(8) / Log(2) = 3. Das Fix-Problem mit DIV/0 ist aber gleichbleibend (immer dann, wenn die PPS-Regel gilt: Potenz vor Punkt vor Strich), also 2^Fix(Log(8) / Log(2)) ). Hier muss dann doppelt geklammert werden.

MfG Mario



Anzeige
Re: Herzlichen Dank, aber...
09.12.2002 11:47:22
Wolfgang
das eigentliche Problem ist, ich bekomme
bei unten stehenden Gleichungen zwei ver-
schiedene Ergebnisse.

bei 1.) ist das Ergebnis 4, also falsch
bei 2.) ist das Ergebnis 8, also richtig

1.) a = 2 ^ Fix(Log(8) / Log(2))

2.) b = Fix(Log(8) / Log(2))
a = 2 ^ b

Re: Herzlichen Dank, aber...
09.12.2002 12:10:18
M. Kuhn
Moin Wolfgang,

dazu: Wer lesen kann, ist eindeutig im Vorteil!

Zu Deinem Problem habe ich gestern Abend Ursache und Abhilfe gepostet: Bei Kettenrechnungen á la 2 ^ Fix(Log(8) / Log(2))
muss Excel angewiesen werden, den inneren Term zuerst zu lösen, da hier die PPS-Regel gilt, also muss der Term, welcher der Fix-Fkt. übergeben wird (Log(8) / Log(2) in Werteklammern gesetzt werden (a = 2 ^ Fix([Log(8) / Log(2)]) ), damit das Ergebnis dieses Terms von der Fkt. ausgewertet wird. Und, wie auch bereits gepostet, unter VBA ist Log(8) / Log(2) = 2,07944154167984 / 0,693147180559945 = 3; also Fix(3).
Wird nicht geklammert, dann kann die Fix-Fkt. nur von Log(8) den ganzz. Anteil bestimmen, um DIV/0 zu vermeiden, also Fix(2,07944154167984) = 2.

MfG Mario

Soviel zum Thema

Anzeige
Danke. Jetzt hat es geklingelt :-))
09.12.2002 12:19:54
Ramses
...
Re: Herzlichen Dank, aber...
09.12.2002 12:55:05
Hans W. Hofmann
Hallo Mario,

ich kann Deiner Argumentation nicht so folgen. log(0) ist nicht definert (-unendlich). Der Versuch ein log(0) zu berechnen führt in einen Laufzeitfehler. Was soll VBA da interpretieren, das wäre das erstemal ;-). Insbesondere wo ist da der Bezug zur Problemaufgabe?
Das Problem schein mir ehr das zu sein, dass hier in einem bunten Mix Double, Integer Funktionen gemischt werden. Fix ist da besondern kritisch. Da fehlt bei dem Double-Wert, den die Log-Fkt zurückliefert evtl. e weng was und das wird gleich auf den Stack geschoben - Fix Peng...
Wenn man nämlich a als Integer definiert, erhält man auch das richtige Ergebnis.
Sag doch noch mal zu deinen Werteklammern, wo genau steht da was in der OH...

Gruß HW

Anzeige
Re: Herzlichen Dank, aber...
09.12.2002 13:21:44
M. Kuhn
Moin HW,

auch hier kann ich nur sagen: Wer lesen kann, ist klar im Vorteil!

Von Log(0) war im gesamten Thread nicht die Rede, sondern vom Ergebnis Fix(Log(8)/Log(x)) bei x =2. Was die Argumentation des Type-Mismatches angeht, so ist diese hier völlig fehl am Platze. Funktionen arbeiten grundsätzlich auf dem Stack, dabei wird stets die 'richtige' - sprich genaueste Type genutzt. Die Rückgabe an eine Variable ist hier ebenfalls irrelevant, da der bereits falsch ermittelte Wert übergeben wird.

Und was die Aussage betrifft: [Zitat] ... "Wenn man nämlich a als Integer definiert, erhält man auch das richtige Ergebnis." ...
Leider falsch:
a = 2 ^ Fix(Log(8) / Log(2)) = 3

Richtig ist:
a = 2 ^ Fix([Log(8) / Log(2)]) = 8

Als Literatur empfehle ich:

T. Ottmann/P. Widmayer Algorithmen und Datenstrukturen BI Wissenschaftsverlag 3-411-03161-1 1990

MfG Mario





Anzeige
Sorry, Tippfehler:
09.12.2002 13:26:53
M. Kuhn
Sorry, Ergebnis falsch angegeben!

Korrektur des Zitatblockes:

Und was die Aussage betrifft: [Zitat] ... "Wenn man nämlich a als Integer definiert, erhält man auch das richtige Ergebnis." ...
Leider falsch:
a = 2 ^ Fix(Log(8) / Log(2)) = 4 (vier)


MfG Mario

Re: Herzlichen Dank, aber...
09.12.2002 20:40:58
Hans W. Hofmann
Ja ja, es wird viel mehr geschrieben als gelesen.

[Zitat]
https://www.herber.de/forum/messages/190533.html
Schaut man sich das Konstrukt Fix(Log (8) / Log(0)) an, so stellt man fest, dass es die Fix-Fkt. schwer hat: Bei Log(0) wird der Ganzzahl-Anteil vor der Division 0! Das geht dann schief ...
[/Zitat]

Wenn das schwarze, wie üblich die Buchstaben sind, komm ich damit nicht zurecht?

Vielleicht kannst Du mir das nochmal ausdeutschen, sonst muß tatsächlich den Ottmann/Widmayer lesen :-)...


Gruß HW




Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige