Parte intera: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 39:
 
 
== In programmazione ==
== L'operatore <code>(int)</code> in C ==
 
[[Immagine:Int function.svg|thumb|right|L'operatore <code>(int)</code>]]
 
=== In C ===
Il [[linguaggio di programmazione]] [[C (linguaggio)|C]] e suoi derivati hanno una caratteristica chiamata [[conversione di tipo]] che permette di convertire un valore di un [[tipo di dato|tipo]] in un valore di un altro tipo. In particolare, è possibile convertire un valore reale (rappresentato in [[virgola mobile]]) in un valore intero (rappresentato in [[complemento a due]]) applicando l'[[operatore (informatica)|operatore]] <code>(int)</code>. Questa operazione è un misto delle funzioni floor e ceiling: per ''x'' positivi o nulli, restituisce floor(''x''), e per ''x'' negativi resituisce ceiling(''x'').
 
Molti altri linguaggi, come [[Java (linguaggio)|Java]] (testato con Sun JDK versione 1.5.0_05) e [[Perl]] (versione 5.8.0) si comportano in maniera simile, così come la funzione [[POSIX]] floor().
Come le funzioni floor e ceiling, questa operazione non è continua, cosa che può amplificare gli errori di arrotondamento con conseguenze disastrose. Per esempio <code>(int)(0.6/0.2)</code> restituisce come valore, 2 nella maggior parte delle implementazioni del C, anche se 0.6/0.2 = 3. Questo perché i computer lavorano internamente con il [[sistema numerico binario]] e non è possibile rappresentare i numeri 0.6 e 0.2 con stringhe binarie di lunghezza finita. Quindi viene applicato qualche arrotondamento (con il relativo errore) e il risultato viene calcolato come 2.999999999999999555910790149937, che l'operatore <code>(int)</code> convertirà tranquillamente al valore 2.
 
=== Problemi di arrotondamento ===
Molti altri linguaggi, come [[Java (linguaggio)|Java]] (testato con Sun JDK versione 1.5.0_05) e [[Perl]] (versione 5.8.0) si comportano in maniera simile, così come la funzione [[POSIX]] floor().
Come le funzioni floor e ceiling, questa operazione non è continua, cosa che può amplificare gli errori di arrotondamento con conseguenze disastrose. Per esempio <code>(int)(0.6/0.2)</code> restituisce come valore, 2 nella maggior parte delle implementazioni del C, anche se 0.6/0.2 = 3. Questo perché i computer lavorano internamente con il [[sistema numerico binario]] e non è possibile rappresentare i numeri 0.6 e 0.2 con stringhe binarie di lunghezza finita. Quindi viene applicato qualche arrotondamento (con il relativo errore) e il risultato viene calcolato come 2.999999999999999555910790149937, che l'operatore <code>(int)</code> convertirà tranquillamente al valore 2.
 
A causa di questi problemi, la maggior parte delle [[calcolatrice|calcolatrici]] moderne usa internamente il [[Binary-coded decimal|sistema numerico decimale codificato in binario]].