Operazioni aritmetiche su decimali molto, molto lunghi
-
03-07-2019 - |
Domanda
Sono sempre stato curioso: come posso eseguire operazioni aritmetiche su decimali molto lunghi - per esempio, calcolando pi al 3000 ° decimale (specialmente in un linguaggio imperativo)?
Soluzione
Utilizzare una lingua o una libreria che supporti numeri di precisione arbitrari ...?
In Python, gli ints si auto-promuovono per lunghi di dimensioni arbitrarie. È possibile utilizzare un secondo valore per tenere traccia di quanti decimali devono essere spostati per ottenere una sorta di virgola mobile di precisione arbitraria.
In Java puoi utilizzare BigDecimal , che rappresenta " Numeri decimali con segno di precisione arbitraria immutabile " ;.
Sono sicuro che esistono altri esempi in altre lingue.
Altri suggerimenti
Per le lingue che non supportano i calcoli sui bignum, ci sono spesso librerie. Potresti dare un'occhiata a GMP , ad esempio. I documenti ti daranno indicazioni su alcuni dei tipici approcci algoritmici.
Rendere veloce l'aritmetica di bignum è difficile, quindi ci sono alcuni algoritmi piuttosto contorti là fuori ...
Devi lavorare con i dati a livello di cifra (ad es. calcolare ogni cifra in modo incrementale o deterministico) o definire nuove strutture di dati che hanno un numero sufficiente di bit per fornire un'adeguata precisione.