7

Esiste una libreria di compilazione (metaprogrammazione del modello) per l'aritmetica di precisione arbitraria in C++?Libreria bignum di compilazione C++

Ho bisogno di questo per aiutare con l'aritmetica a virgola fissa e il ridimensionamento binario nel mio programma per i microcontrollori AVR. Ad esempio, quando vengono moltiplicati due numeri ciascuno con i propri limiti, i bignum verrebbero utilizzati per calcolare i limiti del risultato e spostare il punto di frazione negli input e/o output come appropriato. Ma i limiti del risultato potrebbero non essere rappresentabili nei tipi interi standard.

+0

Cosa intendi per "metaprogrammazione modello"? Le librerie di tipi "BigInteger" utilizzano praticamente sempre l'allocazione dinamica della memoria. Altrimenti, puoi semplicemente utilizzare un tipo più grande (cioè int64 firmato per moltiplicare due int32 firmati) – DarkWanderer

+2

@DarkWanderer intendo, beh, metaprogrammazione del modello. Questo link dovrebbe darti un'idea di come i bignum potrebbero essere implementati in fase di compilazione: http://alpmestan.wordpress.com/2009/12/03/functional-compile-time-templates-based-type-lists-in-c/ . In sostanza, un bignum in fase di compilazione sarebbe un tipo (ricorsivo) e il compilatore avrebbe a che fare con l'allocazione della memoria. –

+0

@DarkWanderer Un tipo intero di grandi dimensioni non è sufficiente - il mio problema riguarda i limiti dei tipi in fase di compilazione, e ho bisogno di avere controlli in fase di compilazione qualcosa sulla falsariga di "A + B INT64_MIN". I bignum in fase di compilazione consentirebbero che questi vengano scritti "direttamente" senza doversi preoccupare degli overflow integer. –

risposta

1

Forse Boost.Multiprecision è quello che stai cercando.

+0

La documentazione specifica "Tuttavia, non sarà possibile eseguire operazioni aritmetiche in fase di compilazione su tali tipi." –