Domanda

Non sono un matematico, ma presumo che dividere per l'infinito sia una cattiva matematica o, quanto meno, poco pratico.

Ho appena trascorso mezz'ora a eseguire il debug del mio javascript che funzionava perfettamente in Firefox ma mi stava dando un errore in IE. Alla fine ho capito che era perché in alcuni scenari chiedevo a IE di dividere per l'infinito.

Quindi, ho risolto questo problema, ma sono curioso di sapere perché Firefox fosse d'accordo. Certo, questa potrebbe essere più una questione di matematica che di programmazione. ;)

È stato utile?

Soluzione

Penso che sia un bug in IE. Secondo le regole della matematica IEEE, n / Inf = 0 (per n! = 0). Quindi se IE grida su questo, è un problema in IE. D'altra parte, l'uso di Inf in normali operazioni matematiche è problematico e sarebbe meglio se il codice non si basasse su di esso in primo luogo.

Perché è pericoloso? Bene, per cominciare, secondo IEEE 754:

1/0 = Inf
1/-0 = -Inf

ma sappiamo che 0 = -0, quindi

Inf = -Inf

che è ovviamente indesiderabile. IEEE non intendeva comunque rendere Inf un numero ordinario. Inf e NaN esistono per rendere l'aritmetica in virgola mobile nei computer con la loro intrinseca limitata precisione e i problemi di overflow assomigliano all'aritmetica del mondo ordinario, dove, per fare l'esempio più semplice, l'insieme di numeri reali viene chiuso in aggiunta (l'aggiunta di due numeri reali porta sempre a un altro numero reale). Se lo fai con float di precisione finita, otterrai casi in cui l'aggiunta di due numeri provoca un overflow. Per evitare di dover considerare questo come una condizione di errore, IEEE ha introdotto due simboli extra, Inf e NaN, e un insieme di regole per il loro comportamento. Ora il risultato di un'operazione matematica è sempre un numero, o Inf, o NaN, e se il risultato ha un senso o no è lasciato all'utente.

Altri suggerimenti

La divisione per infinito va bene, è zero.

A meno che tu non stia dividendo l'infinito per l'infinito, il che è indefinito (almeno in generale)

Dividere un numero per infinito è perfettamente ragionevole da una prospettiva matematica. È un numero infinitamente vicino a zero, senza effettivamente raggiungere lo zero.

Dal punto di vista del software, questo è molto più difficile, poiché l'infinito non è un valore discretamente rappresentabile. La mia ipotesi sarebbe che la tua differenza di comportamento si basi su decisioni progettuali.

In Firefox, probabilmente hanno scelto di restituire un valore pari a zero, poiché per tutti gli scopi pratici, questo risultato funzionerà per quello che ti serve.

In IE, d'altra parte, sembra che gli sviluppatori abbiano preso la decisione consapevole di non consentire di eseguire un calcolo per il quale sapevano di non poter dare una risposta discreta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top