Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
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
Inhaltsverzeichnis

Makro mit Kubikzahlen

Makro mit Kubikzahlen
alifa
Hallo,
es gib die Lösungen a=6714; b=5453; c=2547. Die For-Next Schleifen enthalten die abdeckenden Grenzwerte. Doch das Makro findet keine Lösung. Liegt es vielleicht an der Kubikwurzel? Dieses Makro soll auch andere Werte berechnen! Wo ist der Fehler?
Gruß, Erhard
Option Explicit
'gesucht sind 3 Zahlen a,b und c. Ihre Summe darf höchstens 15000 sein
'ab und a>c;
Sub TestKubikwurzel()
Dim a%, b%, c%, z%, t!
t = Timer
For a = 6500 To 10000
For b = 4000 To 7000
If a  b And (a + b) ^ (1 / 3) = Int((a + b) ^ (1 / 3)) Then
For c = 1000 To 2600
If (a + b + c) 

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro mit Kubikzahlen
03.11.2009 01:10:38
Daniel
HI
dein Problem sind die Ungenauigkeiten, die entstehen, wenn Computer Zahlen vom Binär- ins Dezimalsystem umrechnen müssen.
Erschwerdent kommt hinzu, daß Excel immer versucht, wenn keine klaren Vorgaben bestehen, das sparsamste Datenformat zu verwenden, was die Genauigkeit noch weiter verschlechtert.
deine Variablen sind als INTEGER deklariert, daher ist das sparsamste Datenformat für die Berechnung der Wurzel SINGLE, was aber ein sehr ungenauses Format ist.
der 2. Punkt ist, daß INT() immer abrundet, verbunden mit den oben genannten Ungenauigkeiten ergibt
Int((6714 + 5453) ^ (1 / 3)) den Wert 22, obwohl
(6714 + 5453) ^ (1 / 3) Wert 23 hat!
somit sollte klar sein, warum dein Marko keine Lösung findet.
Lösung des Problems:
Variante 1) statt mit INT mit ROUND arbeiten:

If a  b And Round((a + b) ^ (1 / 3), 6) = Round((a + b) ^ (1 / 3), 0) Then
Variante 2) die Schleifenvariablen a, b und c nicht als INTEGER, sondern als DOUBLE deklarieren, dann werden auch die Berechnungsergebnisse immer als Double und somit mit einer höheren Genauigkeit berechnet, so daß auch die Ungenauigkeiten nicht mehr ins Gewicht fallen.
(wobei das keine Garantie ist, daß es bei bestimmten Zahlen nicht doch zu Ungenauigkeiten kommt, dh. wenn Bedingungen auf IST GELEICH lauten, ist die Verwendung von ROUND immer zu empfehlen.
jetzt zum wichtigsten Problem: Wie kommt man auf die Lösung?
ganz einfach: mal die Lösungszahen als Startwert für die Schleifen in den Code eingeben und das Makro im Einzelstep durchtesten. Dann sieht man, bei welcher Abfrage falsch Berechnet wird und kann sich im Direktfenster die Variablen und die Berechnungsergebnisse anzeigen lassen.
Gruß, Daniel
Anzeige
AW: Makro mit Kubikzahlen
03.11.2009 07:52:30
alifa
Hallo,
schön, dass es dieses Forum gibt! Danke!
Erhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige