In C (e quindi anche in Objective-C), le espressioni vengono quasi sempre valutate indipendentemente dal contesto in cui appaiono.
L'espressione 1/120
è una divisione di due operandi int
, quindi produce un risultato int
. La divisione intera tronca, quindi 1/120
produce 0
. Il fatto che il risultato sia utilizzato per inizializzare un oggetto float
non modifica il modo in cui viene valutato 1/120
.
Questo può essere controintuitivo, a volte, soprattutto se si è abituati al modo in cui i calcolatori generalmente funzionano (di solito memorizzano tutti i risultati in virgola mobile).
Come hanno detto le altre risposte, per ottenere un risultato vicino a 0.00833 (che non può essere rappresentato esattamente, BTW), è necessario eseguire una divisione in virgola mobile anziché una divisione in interi, eseguendo uno o entrambi degli operandi a virgola mobile. Se un operando è a virgola mobile e l'altro è un numero intero, l'operando intero viene convertito prima in virgola mobile; non esiste un virgola mobile diretto per operazione di divisione intera.
Si noti che, come dice il commento di @ 0x8badf00d, il risultato dovrebbe essere 0
. Qualcos'altro deve essere sbagliato perché il risultato stampato sia inf
. Se puoi mostrarci altro codice, preferibilmente un piccolo programma completo, possiamo aiutarti a capirlo.
(Ci sono linguaggi in cui la divisione intera produce un risultato in virgola mobile. Anche in quei linguaggi, la valutazione non è necessariamente influenzata dal suo contesto. Python versione 3 è uno di questi linguaggi; C, Objective-C e Python versione 2 no.)
fonte
2011-12-10 23:57:10
Come si stampa il valore float su console? A meno che non si stia stampando NSLog (@ "inf"); o printf ("inf"); non è possibile ottenere inf stampato su console. – 0x8badf00d
@ 0x8badf00d: Sì, è possibile (probabilmente): 'printf ("% g \ n ", 1.0/0.0);' –