Standard per il calcolo in virgola mobile e fissa

di il
15 risposte

Standard per il calcolo in virgola mobile e fissa

Salve ragazzi,
mi servirebbe sapere tutti (o almeno i principali) standard e/o metodi utilizzati in informatica per il calcolo e la rappresentazione di numeri in virgola mobile e fissa.
Capisco che la richiesta è un poco azzardata (soprattutto per essere il mio primo post), ma non sono riuscito a trovare niente cercando su internet (oltre al conosciutissimo standard IEEE 754).
Spero che la sessione sia giusta (in quanto l'argomento non riguarda linguaggi o sistemi operativi specifici).
Grazie per l'attenzione.

15 Risposte

  • Re: Standard per il calcolo in virgola mobile e fissa

    Ma dove hai fatto la ricerca? Dentro un uovo di pasqua?

    Per le cose intelligenti, si cerca in inglese, non in italiano

    A che ti serve?
    In che contesto?
    Perche' questa domanda?

    Praticamente TUTTE le CPU moderne supportano questo standard.

    Se non fosse cosi', sai i macelli dovuti ad incompatibilita' tra hardware diversi.

    Se vuoi, esistono gli half floating point.

    Altro problema e' se BIG_ENDIAN o LITTLE_ENDIAN, ma il formato e' lo stesso.

    https://en.wikipedia.org/wiki/IEEE_floating_poin
    https://en.wikipedia.org/wiki/Floating_poin

    https://en.wikipedia.org/wiki/Decimal32_floating-point_format

    In alternativa, si sono i numeri in precisione arbitraria:

    https://gmplib.org
    http://www.mpfr.org
    http://www.multiprecision.org/index.php?prog=mp
  • Re: Standard per il calcolo in virgola mobile e fissa

    Migliorabile su microcontrollori a 8 bit quale è il più veloce?
  • Re: Standard per il calcolo in virgola mobile e fissa

    Ovviamente dipende dal tipo di micro...
  • Re: Standard per il calcolo in virgola mobile e fissa

    migliorabile ha scritto:


    Ma dove hai fatto la ricerca? Dentro un uovo di pasqua?

    Per le cose intelligenti, si cerca in inglese, non in italiano

    A che ti serve?
    In che contesto?
    Perche' questa domanda?

    Praticamente TUTTE le CPU moderne supportano questo standard.

    Se non fosse cosi', sai i macelli dovuti ad incompatibilita' tra hardware diversi.

    Se vuoi, esistono gli half floating point.

    Altro problema e' se BIG_ENDIAN o LITTLE_ENDIAN, ma il formato e' lo stesso.

    https://en.wikipedia.org/wiki/IEEE_floating_poin
    https://en.wikipedia.org/wiki/Floating_poin

    https://en.wikipedia.org/wiki/Decimal32_floating-point_format

    In alternativa, si sono i numeri in precisione arbitraria:

    https://gmplib.org
    http://www.mpfr.org
    http://www.multiprecision.org/index.php?prog=mp
    Grazie per la risposta,
    serve per un progetto di un software matematico...

    Ti faccio, inoltre, presente che, apparte i numeri di precisione arbitraria (di cui ti sono grato), tutti i link che hai riportato fanno riferimento a formati appartenenenti al (quasi omnicomprensivo) standard IEEE 754.

    Di numeri in virgola mobile al di fuori di questo standard, ho trovato solo: https://en.wikipedia.org/wiki/IBM_Floating_Point_Architecture

    C'è altro?
    Grazie.
  • Re: Standard per il calcolo in virgola mobile e fissa

    @oregon i generici da hobbista, pic,atmel quindi con i soli calcoli matematici senza virgola.
  • Re: Standard per il calcolo in virgola mobile e fissa

    Lorenzo221 ha scritto:


    Grazie per la risposta,
    serve per un progetto di un software matematico...

    Ti faccio, inoltre, presente che, apparte i numeri di precisione arbitraria (di cui ti sono grato), tutti i link che hai riportato fanno riferimento a formati appartenenenti al (quasi omnicomprensivo) standard IEEE 754.

    Di numeri in virgola mobile al di fuori di questo standard, ho trovato solo: https://en.wikipedia.org/wiki/IBM_Floating_Point_Architecture

    C'è altro?
    Grazie.
    (bastava leggere i link!!!!)

    Ma ti conviene prenderli in considerazione?

    Se utilizzi il formato binario per essere salvato su/letto da file, trasferito/ricevuto via rete, oppure, in futuro integri nel tuo progetto librerie di terze parti, oppure hardware dedicato, per un motivo qualsiasi, ti ritrovi con una bella fregatura!

    Alla fin fine, qualunque formato deve necessariamente avere:

    1) una mantissa
    2) un esponente
    3) un segno per la mantissa
    4) un segno per 'esponente
    5) aggiungici il complemento a 2!

    Se vuoi inventarti un formato custom, ti basta una permutazione qualunque dei 5 punti.

    Ad esempio il formato Microsoft mette prima l'esponente e poi il segno della mantissa!
    Scomodo, visto che gli interi hanno il segno in testa! Ma e' una permutazione dei 5 punti di cui sopra!

    Puoi usare il BCD, i fixed point (che il programmatore medio non usa mai, ma che sono perfetti per implementare il concetto di currency/soldi/moneta)

    Qualunque sia il software che vuoi implementare, se vuoi supportare piu' formati, e' irragionevole implementarlo per tutti i formati.

    Quello che dovresti fare e':
    1) routine di conversione da&per il formato strano a quello di riferimento usato nel tuo software
    2) implementazione del tuo software usando il formato standard.

    A questo punto, perche' non usare come formato standard il IEEE 754????

    E spulcia con Google!!!
  • Re: Standard per il calcolo in virgola mobile e fissa

    Grazie per la risposta,
    Cercavo un formato che non risentisse pesantemente dei vari errori di arrotondamento, assorbimento ecc.
    Evidentemente non c'è.
    Comunque sia posso farne a meno ed adattarmi allo standard IEEE 754 od al limite fare (come hai detto tu) un formato custom che si adatti bene alle mie esigenze.
  • Re: Standard per il calcolo in virgola mobile e fissa

    La tua affermazione e' sibillina: spiegati!

    In che senso: non risentisse pesantemente dei vari errori di arrotondamento, assorbimento?

    Vai pure nel dettaglio!! Non sono di primo pelo
  • Re: Standard per il calcolo in virgola mobile e fissa

    Intendo un formato che:
    1) Distinguesse i decimali periodici (che non approssimasse 0,66666666... in 0,66666667)
    2) Potesse rappresentare tutti i numeri reali (molti non possono essere rappresentati in quanto la loro naturale rappresentazione è dedicata a casi particolari come zeri, infiniti o NaN)
    3) Non avesse problemi di "assorbimento" (in cui la sottrazione tra un numero elevatissimo ed uno bassissimo restituisce il primo invariato)
    4) Non avesse problemi di "cancellamento" (in cui la sottrazione tra due numeri vicinissimi da 0)
    5) Avesse un overflow il più elevato possibile ed un underflow il più basso possibile (cercando di risparmiare per quanto possibile memoria)
    6) Distinguesse i vari casi di NaN in modo efficace (divisione per 0, 0 diviso 0, risultato complesso, ecc.)

    Un formato davvero elaborato, che penso che si possa ottenere solo creando una struct o qualcosa del genere

    Grazie comunque del supporto.
  • Re: Standard per il calcolo in virgola mobile e fissa

    1) la periodicita' di un numero dipende dalla base: 0.666666... e' periodico in base 10, ma puo' essere rappresentato perfettamente in base 3. Un numero periodico in base 10 lo sara' anche in base 2, visto che 10=2*5. E' anche vero che ogni numero periodico e' un numero razionale, ed in questo caso puo' essere descritto in modo infinitamente preciso.
    2) questa e' una convenzione. Per usare tutti i bit per il numero, comunque ti servono altri bit, da qualche altra parte, per la loro rappresentazione
    3) supponi di avere una rappresentazione in grado di gestire un 1.000.000 di cifre decimali. Ora x = 1.00000e0 e y = 1e-7. x+y sara' 1!
    Con un numero fissato di bit, NON esiste soluzione!
    La soluzione e': calcolo in precisione arbitraria, oppure calcolo simbolico in cui il risultato non e' un numero, ma un'espressione.
    4) anche qui' il problema si sposta dalla mantissa all'esponente. Soluzione come 3)
    5) sempre un problema di esponente: fino a che usi N bit con N predefinito, l'esponente sara' compreso tra -2^(N-1) e 2^(N-1)
    6) IEEE 754 gia' supporta il concetto di infinito (x/0 x!=0), indeterminato (0/0), errore di dominio (sqrt(-1))

    Hai gia' tutte le soluzioni:
    float a 16,32,64,80,128 bit (e puoi anche continuare), oppure in precisione arbitraria

    L'analisi dei problemi generati dal poter solo approssimare un valore reale, sono studiati al corso di Calcolo Numerico.
  • Re: Standard per il calcolo in virgola mobile e fissa

    Grazie per la risposta, davvero utile!
  • Re: Standard per il calcolo in virgola mobile e fissa

    Gli standard Floating Point più diffusi sono due, elaborati a due anni di distanza: IEEE 754-1985 e IEEE 854-1987. L'argomento è stato molto spesso oggetto di discussione, com'è facile intuire.

    Il mass market ha scelto di supportare massivamente in hardware e in molte librerie il più semplice IEEE 754, mentre solo recentemente alcuni supercomputer IBM e altre piattaforme evolute di supercalcolo hanno decisamente sposato appieno in hardware (con alcuni passaggi intermedi firmware) il formato 854. Tale formato è stato peraltro anticipatamente supportato da sempre in linguaggi specifici per l'ambito burotico e assicurativo-bancario, quindi sostanzialmente deputati alla gestione simbolica di valute, come COBOL.


    @VBExtreme: l'uso di floating point su MCU a 8 bit ordinarie è in genere solamente sintomo di grossa confusione mentale e macroscopici errori progettuali. Si può facilmente dimostrare, letteratura alla mano, che un buon 99% di problemi in tale ambito si risolvono con un accurato mix di aritmetica razionale e fixed point.
    Oltre alla letteratura classica, esistono anche tonnellate di application notes al riguardo e la più accessibile per la tua preparazione è probabilmente la classica Microchip AN617 "Fixed Point Routines": sebbene il codice Assembly ivi proposto richieda una certa maturità professionale (vi sono numerosi bug e inefficienze), la teoria è spiegata in maniera sufficientemente chiara e semplice per un practitioner con limitato background matematico.
  • Re: Standard per il calcolo in virgola mobile e fissa

    Oioioi!
    proffesore M.A.W, qual buon vento!
    ma il tuo gravatar che fine ha fatto? sei in incognito?
  • Re: Standard per il calcolo in virgola mobile e fissa

    vbextreme ha scritto:


    ma il tuo gravatar che fine ha fatto? sei in incognito?
    No, no. Sono in viaggio, tanto per cambiare, con un portatile aziendale passato per le mani di chissà chi... comunque tutto sommato va bene anche questo come avatar, ESA Software Engineering Guidelines, il capostipite degli standard aerospaziali.

    Fa' il bravo, sennò ti tiro le orecchie e ti mando dietro la lavagna come al solito...
Devi accedere o registrarti per scrivere nel forum
15 risposte