Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
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

Warum funktioniert diese Sub nicht?

Warum funktioniert diese Sub nicht?
08.04.2015 20:40:29
Malte
Hallo,
ich habe folgendes Problem. Ich würde gerne die dritte Wurzel aus einer Variable ziehen. Die _ erste

Sub funktioniert. Die zweite, die für mich relevant ist, ergibt andauernd einen Fehler.

Sub test_geht()
Cells(1, 1) = -1.97E-14
Cells(2, 1) = -1.97E-14 ^ (1 / 3)
End Sub

Sub test_geht_nicht()
Dim a As Double
a = -1.97E-14
Cells(2, 1) = a ^ (1 / 3)
End Sub
Warum funktioniert das zweite Beispiel nicht?
Es ist doch im Prinzip das gleiche, wie im ersten Fall. Ich verzweifle gerade total!
Kann mir jemand helfen?
Vielen Dank!
Gruß!
Malte

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warum funktioniert diese Sub nicht?
09.04.2015 07:17:41
Hajo_Zi
Hallo Malte,
schreib es so
Option Explicit
Sub test_geht_nicht()
Dim a As Double
a = -1.97E-14 ^ (1 / 3)
Cells(2, 1) = a
End Sub

AW: Warum funktioniert diese Sub nicht?
09.04.2015 10:39:38
Malte
Hallo,
vielen Dank für die Antwort.
Nun bin ich komplett verwirrt.
In meiner Tabelle, wo exakt dieselbe Rechnung vorkommt, steht bereits im Modulkopf Option Explicit. Dennoch funktioniert zur Laufzeit die o.g. Rechnung nicht.
Die Variable ist innerhalb der Funktion deklariert, Zuweisung funktioniert, Wurzel ziehen nicht.
Hier mal der besagte Teil der Funktion in einem Modul (u entspricht dabei meinem a mit dem Wert -1.97E-14)
Option Explicit
Function cardanische_gleichung(ByVal p As Double, ByVal a As Double, ByVal b As Double, ByVal T  _
_
As Double) As Variant
Dim a0 As Double, a1 As Double, a2 As Double
Dim j As Double, q As Double, Delta As Double, u As Double, w As Double
Dim arr(1) As Double
'Parameter berechnen
a2 = -(R * T - b * p) / p
a1 = -(2 * R * T * b - a + 3 * b ^ 2 * p) / p
a0 = (R * T * b ^ 2 - a * b + b ^ 3 * p) / p
j = (3 * a1 - a2 ^ 2) / 3
q = 2 * (a2 ^ 3) / 27 - a2 * a1 / 3 + a0
Delta = (q / 2) ^ 2 + (j / 3) ^ 3
'Folgende Zeile erzeugt den Fehler
u = (-q / 2 + (Delta ^ 0.5)) ^ (1 / 3)
w = -j / 3 / u
arr(0) = (u + w) - a2 / 3
cardanische_gleichung = arr()
End Function

Gruß!
Malte

Anzeige
Exponential Funktion
09.04.2015 11:33:22
EtoPHG
Hallo Malte,
Im reellen Zahlenraum:
der ^ Operator verlangt eine positive Basis, wenn der Exponent nicht ganzzahlig ist: Radizieren ist nur mit positiven Zahlen möglich!
oder umgekehrt die Basis darf nur negativ sein, wenn der Exponent ganzzahlig ist: Potenzieren ist auch mit negativen Zahlen möglich!
Das ist per definitionem gegeben!
Gruess Hansueli

AW: Exponential Funktion
09.04.2015 21:42:53
Malte
Hallo,
vielen Dank!
Allerdings bin ich immernoch nicht 100% sicher, da ich mit dem Taschenrechner, etc. ebenfalls "einfach" die Rechnung eintippen kann und auch Ergebnisse erhalte!
Vielen Dank!
Gruß
Malte

Anzeige
Auch Taschenrechner 'rechnen' falsch,....
10.04.2015 09:36:55
EtoPHG
weil die algorithmische Berechnung zufällig stimmt, oder eben nicht, Malte,
Nehmen wir dein Beispiel:
Basis: -1.97E-14
Exponent: (1 / 3) bzw. 3te Wurzel
Resultat Taschenrechner: -2.70077709684987E-05
Jetzt:
Basis: -1.97E-14
Exponent: (1 / 4) bzw. 4te Wurzel, oder jede beliebige gerade Wurzel
Resultat Taschenrechner: Ungültige Eingabe!
Jetzt frag Dich: Wieso?
In deinem Code kannst du bei der Berechnung von
u = (-q / 2 + (Delta ^ 0.5)) ^ (1 / 3)

unter 2 Bedingungen in den casus irreducibilis laufen:
1. Der erste Klammerausdruck ergibt eine negative Zahl aus der du die 3te Wurzel ziehen willst.
2. Der innere Klammerausdruck enthält ein negatives Delta aus dem du die Quadratwurzel ziehen willst.
Es ist also komplett abhängig von den Eingangsparameter und den Zwischenrechnungen, ob du in dieser Zeile ggf. mit einer negativen Basis versuchst zu radizieren.
Gruess Hansueli

Anzeige
AW: Auch Taschenrechner 'rechnen' falsch,....
10.04.2015 11:24:34
Malte
Vielen Dank!
Ich habe es mir immer so erklärt, dass bei ungeraden Wurzeln negative Ergebnise möglich sind, da
-a^(1/3)*-a^(1/3)*-a^(1/3) = a^(2/3)*(-a)^(1/3) = -a^(3/3) = -a
Daher sind für mich dritte, bzw. ungeraden Wurzeln aus negative Zahlen eigentlich lösbar.
Aus geraden Wurzeln ist dies natürlich nicht möglich.
Gruß
Malte

AW: Auch Taschenrechner 'rechnen' falsch,....
10.04.2015 11:50:53
EtoPHG
Hallo Malte,
Dazu gibt es unterschiedliche Meinungen und Implementierungen:
Siehe Wurzeln_aus_negativen_Zahlen,
wobei Excel die Meinung 1 (Keine Wurzeln aus negativen Zahlen)
und dein Taschenrechner Meinung 2 (Negative Wurzel erlaubt, bei ungeradem Exponent) implementiert.
Gruess Hansueli

Anzeige
AW: Auch Taschenrechner 'rechnen' falsch,....
10.04.2015 11:54:20
Malte
Hm, alles klar!
Ich schau mal, wie ich es löse.
Vielen Dank!
Gruß
Malte

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige