Implementazione della divisione in virgola mobile in base 10

1

Sto implementando l'aritmetica in virgola mobile, per un microcontrollore che non supporta numeri in virgola mobile, né nell'hardware né nel software. (Il software viene "scritto" in una sorta di programma di schemi elettrici). Ho finito di codificare / decodificare da / a interi, aggiungere, sottrarre e moltiplicare. I miei "float" sono rappresentati come C * 10^E , dove:

  1. C, il coefficiente, è un numero intero con segno a 32 bit compreso tra 100000000-999999999 o 0.
    • (Nove cifre di precisione, più il caso speciale di zero.)
  2. E, l'esponente, è un intero con segno a 32 bit che copre l'intero intervallo a 32 bit.
    • (Sì, è eccessivo).

Ho scelto i numeri base-10 per semplificare la verifica della matematica. La mia strategia per la moltiplicazione era di dividere i due numeri AaaBbbCcc e DddEeeFff in tre pezzi ciascuno (milioni, migliaia e uno) e calcolare la moltiplicazione come

(ABC * 10^Y) * (DEF * 10^Z) =
  ((AD * 10^12) +
   ((AE + BD) * 10^9) +
   ((AF + BE + CD) * 10^6) +
   ((BF + CE) * 10^3) +
   (CF * 10^0))
  * 10^Y+Z

Ogni * e + che rappresentano una normale moltiplicazione o addizione e 10 ^ N che sono falsi con me hard-coding in un 1000, 1000000, ecc. Si noti inoltre che questo non ricorre o si ripete, e qualsiasi risposta non può recurse o loop. Ho accesso a somma intera, sottrazione, divisione, moltiplicazione, modulo, cos / sin / tan / arccos / arcsin / arctan, valore assoluto e radice quadrata.

Domanda principale:

Finalmente riuscirò a capire come si fa la divisione con un approccio simile per dividere i coefficienti in numeri più piccoli, che saranno migliori per la divisione a 32 bit. Non ho fatto il mio algebra da molto tempo, quindi la moltiplicazione mi ha portato a circa un giorno e mezzo. Dal momento che presumo che la divisione sia più complicata concettualmente, sarebbe molto utile se qualcuno su SE potesse fare la matematica per me. Quindi, come faccio?

    
posta E.T. 05.04.2013 - 00:45
fonte

2 risposte

1

Data la divisione: %codice% può essere riscritto nel modulo: AAABBBCCC / X .

Queste formule algebriche, più o meno alcune divisioni o moltiplicazioni per poteri di 10, otterranno la risposta.

    
risposta data 10.04.2013 - 22:14
fonte
2

Il manuale di Aritmetica a virgola mobile , sebbene piuttosto costoso, è un riferimento completo che puoi entrare in tema. È progettato pensando a usi applicativi, anche se potrebbe essere difficile analizzare le sezioni formali della matematica contenute in questo. Tuttavia, fornirà una soluzione per la divisione sia in hardware che in software, se è possibile analizzare il contenuto che non è particolarmente mistico a meno che non si approfondisca la sezione di prova del libro.

Wikipedia elenca anche un numero di algoritmi di divisione , la maggior parte dei quali sono coperti in dettaglio da oscuranti nel libro sopra . L'articolo collega anche un simulatore Javascript per testare vari algoritmi .

    
risposta data 05.04.2013 - 03:00
fonte

Leggi altre domande sui tag