2012-04-28 6 views
13

C99 allegato F (supporto virgola mobile IEEE) dice questo:Perché pow (-infinity, positivo non intero) + infinito?

pow(−∞, y) ritorni + ∞ per y> 0 e non un intero dispari.

Ma, dire, (-∞) 0,5 ha effettivamente i valori immaginari ± ∞i, non + ∞. Lo sqrt(−∞) di C99 restituisce un NaN e genera un errore di dominio come previsto. Perché allora è necessario il pow per restituire + ∞?

(La maggior parte delle altre lingue utilizzare la libreria C, direttamente o, come Python in questo caso, copiare il comportamento richiesto di esso per gli standard, quindi in pratica questo colpisce più di C99.)

+1

Non sono sicuro di cosa intendi con "-∞ 0,5 è in realtà il numero immaginario ∞i"; da dove vengono i numeri immaginari? –

+2

@OliCharlesworth matematica standard: l'acquisizione di un numero negativo di un numero negativo restituisce un numero immaginario. – Alnitak

+2

@Alnitak: non sono sicuro che concetti come "∞i" siano particolarmente significativi ... –

risposta

13

Per intero dispari y, ha senso definire

pow(±0, y) = ±0 

Dopo tutto, alzando per un potere strano conserva sempre il segno. Se possiamo preservare il segno dello zero, potremmo farlo altrettanto bene. Per positiva non -integer y, dovremmo definire

pow(±0, y) = +0. 

Il segno non è definito. Ma non lo impostiamo a NaN per -0 per lo stesso motivo per cui non impostiamo sqrt(-0) uguale a NaN: semplicemente non avrebbe senso. (FWIW, questo è anche come viene definito nella sezione 9.2.1 dello standard IEEE-754-2008.)

Dal 1/± 0 = ± ∞, e matematicamente

pow(x,y) = 1/pow(1/x,y) 

quindi impostando x=±∞ in quanto sopra, porta a:

pow(±∞,y) = 1/pow(±0,y) = 1/+0 = +∞ 

per y un non intero positivo.

+0

Cosa succede se si considera (± 1)/0 = ± ∞, considerando che "-0" è il numero reale identico "0"? –

+0

@HeathHunnicutt '(-inf)^(1/2) = (-1/0)^(1/2) = (-1)^(1/2)/0 = nan/0 = nan' –

+2

Questa mossa la domanda a "Perché avere -0 affatto?" Bene, una ragione è che '-0' rappresenta un underflow dal basso. Un altro è che i tagli di ramo nel piano complesso, come sono tradizionalmente definiti, funzionano come previsto con '-0'. –