Added a postfix "M" to make the number as BigDecimal or "N" as a BigInteger:
user=> 1e308M 1E+308M user=> (class 1e308M) java.math.BigDecimal user=> (* 10.0 1e108M) 1.0E109 2012/6/26 Cedric Greevey <cgree...@gmail.com> > On Tue, Jun 26, 2012 at 1:11 AM, Sean Corfield <seancorfi...@gmail.com> > wrote: > > On Mon, Jun 25, 2012 at 9:19 PM, Cedric Greevey <cgree...@gmail.com> > wrote: > >> user=> 1e309 > >> Infinity > > > > FWIW, on 1.4.0 I get: > > > > user=> 1e309 > > CompilerException java.lang.RuntimeException: Unable to resolve > > symbol: Infinity in this context, compiling:(NO_SOURCE_PATH:1) > > That's *really* broken. > > Unfortunately, digging deeper I found that the 1023 exponent limit is > 2^1023, not 10^1023, which means it really is around 309. I've had to > reimplement some stuff using BigDecimals and to write these, since > there seem to be no corresponding methods built into Java anywhere: > > (defn log [x] > (if (instance? BigDecimal x) > (let [s (.scale x)] > (+ (Math/log (.scaleByPowerOfTen x s)) (* (- s) (Math/log 10.0)))) > (Math/log x))) > > (defn log10 [x] > (/ (log x) (Math/log 10.0))) > > (defn exp [x] > (let [r (Math/exp x)] > (if (.isInfinite r) > (let [p10 (int (/ x (Math/log 10.0)))] > (.scaleByPowerOfTen (bigdec (Math/exp (- x (* p10 (Math/log > 10.0))))) p10)) > r))) > > These seem to work fine, where extended precision isn't really needed, > only large exponents. However, I've run into another problem, which is > that when doubles and BigDecimals mix 1.3 seems to convert to doubles. > This appears to contradict part of > > http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics > > specifically "When different types of numbers are used in a math > operation, the result will be the larger or more general of the two > types." > > That doesn't seem to hold when the types are double and BigDecimal, > for some reason. Is there any setting I can change (analogous to > with-precision) to force BigDecimal contagion? I considered using > those icky primed operators, but for some reason /' seems to be > missing from the set and I need division... > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- 庄晓丹 Email: killme2...@gmail.com xzhu...@avos.com Site: http://fnil.net Twitter: @killme2008 -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en