Sicherlich ist es schon vielen so ergangen: Excel rechnet es, der Taschenrechner auch, bloß im C++-Code ist der Wurm drin. Beim Ziehen der dritten Wurzel aus einer negativen Zahl mittels pow-Funktion (x^1/3) poppt ein pow domain error auf:
#include <math.h> double x = -27.0; double y = pow(x, (1.0 / 3.0)); // <-- pow domain error
Die Lösung ist rel. einfach. Für ungerade Wurzel-Exponenten kann man die Wurzel aus dem Absolutwert der Basis ziehen und das Ergebnis dann mit dem Vorzeichenwert nochmal multiplizieren:
#include <math.h> double x = -27.0; double ax = fabs(x); double y = pow(ax, (1.0 / 3.0)) * x / ax;
Das Problem besteht in der Umsetzung der pow-Funktion über Logarithmen:
pow(x,y) = (e^ln(x))^y = e^(y*ln(x)) d.h. pow(-1,y) = e^(y*ln(-1)) --> der nat. Logarithmus akzeptiert keine neg. Argumente oder 0 --> pow domain error