In C ++ Das Ergebnis der pow (0, 0) ist das Ergebnis grundsätzlich Implementierung Verhalten definiert , da mathematisch haben wir eine widersprüchliche Situation , wo N^0
immer sein soll , 1
sondern 0^N
sollte immer sein , 0
für N > 0
, so dass Sie keine Erwartungen mathematisch als auf das Ergebnis dieser entweder haben sollten. Dieser Wolfram Alpha Forenbeiträge gehen auf etwas mehr Details ein.
Obwohl das pow(0,0)
Ergebnis in 1
für viele Anwendungen nützlich ist, wie in der Begründung für den internationalen Standard - Programmiersprachen - C im Abschnitt über die Gleitkomma-Arithmetikunterstützung nach IEC 60559 angegeben :
Im Allgemeinen meidet C99 ein NaN-Ergebnis, bei dem ein numerischer Wert nützlich ist. [...] Die Ergebnisse von pow (∞, 0) und pow (0,0) sind beide 1, da es Anwendungen gibt, die diese Definition ausnutzen können. Wenn beispielsweise x (p) und y (p) analytische Funktionen sind, die bei p = a Null werden, nähert sich pow (x, y), das exp (y * log (x)) entspricht, 1, wenn sich p nähert ein.
Aktualisieren Sie C ++
Wie Leemes richtig hervorhob, habe ich ursprünglich auf die Referenz für die komplexe Version von pow verwiesen, während die nicht komplexe Version behauptet, es handele sich um einen Domänenfehler. Der Entwurf des C ++ - Standards greift auf den Entwurf des C-Standards zurück und sowohl auf C99 als auch auf C11 im Abschnitt Absatz der 7.12.7.4
pow-Funktionen 2 sagt ( Hervorhebung von mir ):
[...] Ein Domänenfehler kann auftreten, wenn x Null und y Null ist. [...]
die, soweit ich das beurteilen kann mittels dieses Verhalten ist nicht spezifiziert Verhalten ein wenig Abschnitt Winding zurück 7.12.1
Behandlung von Fehlerzuständen , sagt:
[...] Ein Domänenfehler tritt auf, wenn sich ein Eingabeargument außerhalb der Domäne befindet, für die die mathematische Funktion definiert ist. [...] Bei einem Domänenfehler gibt die Funktion einen implementierungsdefinierten Wert zurück. Wenn der ganzzahlige Ausdruck math_errhandling & MATH_ERRNO ungleich Null ist, erhält der ganzzahlige Ausdruck errno den Wert EDOM. [...]
Wenn also ein Domänenfehler aufgetreten wäre, wäre dies ein implementierungsdefiniertes Verhalten, aber sowohl in den neuesten Versionen gcc
als auch clang
im Wert von errno
ist 0
es kein Domänenfehler für diese Compiler.
Aktualisieren Sie Javascript
Für Javascript gibt die ECMAScript®-Sprachspezifikation im Abschnitt 15.8
Das mathematische Objekt unter 15.8.2.13
pow (x, y) unter anderem Folgendes an:
Wenn y +0 ist, ist das Ergebnis 1, auch wenn x NaN ist.