2011-08-18 17 views

risposta

14

Usa BigDecimal numeri e with-precision:

(with-precision 50 (/ 1M 7)) 
=> 0.14285714285714285714285714285714285714285714285714M 
+0

Sì, era abbastanza semplice. Zoppo da parte mia per fare queste domande Grazie tante! –

+0

Osservate, anche con precisione e BigDecimal si sta arrotondando ad un certo punto e le cifre 142857 sono appena ripetute all'infinito. (vedi http://en.wikipedia.org/wiki/Continued_fraction) – klang

+0

Clojure docs: ['with-precision'] (http://clojuredocs.org/clojure_core/clojure.core/with-precision) –

10

Clojure (e praticamente tutte le lische) ha un rapporto tipo in questo modo non si perde di precisione. fai tutti i tuoi calcoli con il rapporto e converti in double/float all'ultimo minuto per evitare problemi di precisione.

+0

Tuttavia, fai attenzione ai rapporti. Ad esempio, se continui a moltiplicare i rapporti ripetutamente, potresti ritrovarti con numeratori e denominatori enormi. Questo può diventare molto lento e può utilizzare molta RAM. – Mars

Problemi correlati