Come può un computer arrotondare l'ultima cifra in una rappresentazione in virgola mobile?

2

Sono confuso da come un computer arrotonda l'ultima cifra nella rappresentazione in virgola mobile. Ad esempio, mi viene detto che x=1.24327789 è memorizzato in un computer con una capacità di 6 cifre, quindi la rappresentazione in virgola mobile sarebbe x=0.124328x101 , dove chiaramente l'ultima cifra è stata arrotondata.

La mia confusione si riferisce a come il computer può avere la capacità di arrotondare quest'ultima cifra, se non ha una capacità di 7 cifre per conoscere l'ultima cifra.

Probabilmente ho un modo incompleto di comprendere questa rappresentazione, ma non ho alcun background in CompSci.

    
posta DLV 05.06.2015 - 04:15
fonte

3 risposte

9

Con alcune eccezioni dispari , un numero a virgola mobile viene memorizzato come binario nello standard noto come IEEE 754 . Queste sono le rappresentazioni più spesso a 32 bit (percisione singola) e 64 bit (doppia precisione). La rappresentazione a 32 bit può memorizzare circa 7 cifre decimali, ma ricorda che la rappresentazione sottostante è in binario.

La rappresentazione di 1.2432778910 è in realtà 00111111100111110010001110111011 come numero di virgola mobile IEEE 754 a precisione singola in binario.

Questo è composto da tre parti:

  • Il bit di segno ( 0 che indica che è positivo)
  • L'esponente ( 01111111 che è 127) che dà 2 127 -127 che sta per essere 2 0
  • La mantissa ( 00111110010001110111011 ) che ha una percentuale di riferimento 1 implicita.

Questo ci dà +20 * 1.00111110010001110111011 che ti dà il tuo numero. Se guardi i primi bit di coppia di 1.00111112 vedrai che questo è piuttosto vicino a 1.2510 o 1.012 .

Durante la lettura dei numeri binari oltre il punto binario (non decimale) ...

Proprio come 10012 rappresenta 1*23 + 0*22 + 0*21 + 1*20 , il valore 1.0112 rappresenta 1*20 + 0*2-1 + 1*2-2 + 1*2-3 o 1 + (1/4) + (1/8)

Ora, quella conversione l'ho fatta un po 'sopra - l'ho presa da un convertitore IEEE 754 perché farlo a mano è noioso - di solito è una buona parte di un compito a livello di college.

L'arrotondamento è in realtà un grosso problema. Come descritto in Note di lezione sullo stato di IEEE Standard 754 per aritmetica binaria a virgola mobile del '97, gli arrotondamenti erano abbondanti negli anni '70.

Il numero 1.24327789 in formato binario è 1.0011111001000111011101011011010101100011110011111000100000111...2

Quindi, si assume 1 e la mantissa è 23 bit di quello ...

         1         2   |
12345678901234567890123v
0011111001000111011101011011010101100011110011111000100000111

E vedi nella freccia che questo numero dovrebbe essere arrotondato per darci 001111100100011101110112 che è la mantissa dall'alto. E questo è come viene rappresentato e arrotondato. Dovresti notare che quando viene arrotondato, è leggermente maggiore dell'originale e più vicino a 1.24327790737152110 .

    
risposta data 05.06.2015 - 05:08
fonte
1

Se il tuo computer utilizza IEEE 754 numeri a virgola mobile a precisione singola (come la maggior parte dei computer), utilizza una rappresentazione in cui un numero x è rappresentato da un segno (+1 o -1), una mantissa che è un numero intero ≥ 2 ^ 23 e ≤ 2 ^ 24 - 1, e un esponente binario b; il numero rappresentato è segno * mantissa * 2 ^ b. (Ci sono alcuni dettagli non menzionati).

Un numero da 1 a 2 ha un esponente b = -23, quindi quella mantissa * 2 ^ b è compresa tra 1 e 2. La mantissa è un numero intero, quindi il numero è un multiplo di 2 ^ -23. Puoi calcolare che 2 ^ -23 è un po 'più di 0.000.000 119.

    
risposta data 29.11.2015 - 19:00
fonte
0

Penso che le altre risposte in realtà non risolvano il problema di questa domanda.

Se inserisci il numero 1.24327789 , inizialmente è semplicemente una sequenza di caratteri o di sequenze di tasti. Per trasformarlo in una rappresentazione numerica, un compilatore o un interprete deve convertirlo. Questo programma comprende le rappresentazioni decimali e può produrre una rappresentazione binaria standard in virgola mobile. E infatti, per i suoi scopi interni, può prima convertirlo in una rappresentazione binaria di precisione più alta di quella che può essere memorizzata in seguito, e quindi arrotondare per la rappresentazione finale.

    
risposta data 29.08.2016 - 22:25
fonte

Leggi altre domande sui tag