Quali sono gli approcci di implementazione aritmetica di precisione arbitraria più noti? [chiuso]

1

Scriverò una libreria di classi per .NET che fornisce un'implementazione dell'aritmetica di precisione arbitraria per numeri interi, razionali e forse complessi. Quali approcci più noti dovrei acquisire familiarità con?

Ho provato a iniziare con TAUTP Vol.2 di Knuth (Algoritmi seminali, Capitolo 4 - Aritmetica) ma è troppo complicato. Almeno non sono riuscito a ottenere le idee in un periodo di tempo relativamente breve.

    
posta Igor Soloydenko 11.02.2012 - 13:31
fonte

2 risposte

2

Se utilizzi C # 4.0 o versioni successive, hai già un BigInteger classe. Partire da qui e creare la tua classe Rational ti farà risparmiare un sacco di tempo.

Se vuoi costruire tutto da solo, allora dovrai implementare alcuni algoritmi complessi, specialmente per la moltiplicazione. Potresti iniziare con l'algoritmo di moltiplicazione ingenuo che ha complessità temporale O(n²) . Molti altri algoritmi dipenderanno dalla moltiplicazione (divisione, esponenziazione modulare, gcd, radici quadrate, ecc.). Se hai tutto ciò che funziona e un solido set di test unitari, puoi sostituire l'algoritmo di moltiplicazione ingenuo per qualcosa come la moltiplicazione di Toom-Cook a 3 vie o un algoritmo ancora più avanzato.

    
risposta data 13.02.2012 - 04:52
fonte
2

Affrontare la domanda sul perché ci sia BigInteger ma non BigReal, ecc .: questo ha a che fare con la natura arbitraria della rappresentazione in virgola mobile. Lo standard IEEE per il punto mobile a 64 bit mette da parte alcuni dei bit per l'esponente ("caratteristica") e la parte del numero "intero" ("mantissa"). C'è uno standard per la virgola mobile di precisione estesa ma sembra generale: link .

Quindi, l'estensione di un punto mobile richiede decisioni arbitrarie su quanto sia grande rendere le parti del numero mentre l'estensione degli interi è semplice: basta continuare ad aggiungere cifre di ordine superiore secondo necessità. Per questo motivo, ha senso esaminare i razionali (un rapporto di numeri interi a precisione estesa) piuttosto che un punto mobile. Dai un'occhiata qui - link - per alcune considerazioni di alto livello su questo argomento.

    
risposta data 07.09.2012 - 18:17
fonte

Leggi altre domande sui tag