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:
- 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.)
- 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?