Java 如何避免大对数溢出
我试图用Java计算一个大的logarithim,但无法解决如何解决溢出问题。研究表明我需要使用BigDecimal类,但我不能在这个类中使用double。 有人能帮忙吗 干杯,下面是我试图计算的一个例子:Java 如何避免大对数溢出,java,overflow,logarithm,Java,Overflow,Logarithm,我试图用Java计算一个大的logarithim,但无法解决如何解决溢出问题。研究表明我需要使用BigDecimal类,但我不能在这个类中使用double。 有人能帮忙吗 干杯,下面是我试图计算的一个例子: Math.log10(13168375/4224127912)您必须解释错误消息 Y.java:16: error: integer number too large: 4224127912 System.out.println( Math.log10(13
Math.log10(13168375/4224127912)您必须解释错误消息
Y.java:16: error: integer number too large: 4224127912
System.out.println( Math.log10(13168375/4224127912) );
^
这意味着4224127912(!)对于整数来说太大
你可以:
Math.log10(13168375/4224127912.0) // use a double literal
Math.log10((double)13168375/4224127912L) // use a long literal
Math.log10(13168375.0/4224127912L) // use a long literal
无溢出
这里没有“大”的对数。我不确定这里有什么问题。为什么不能直接执行
log10(13168375)-log10(4224127912)
?溢出在哪里?为什么不能从double
创建一个新的BigDecimal
,而不是强制转换<代码>BigDecimal someNumber=新的BigDecimal(doublVal)如果您想计算一个大十进制的日志,请参阅。@GriffeyDog嘿,谢谢-我正集中精力避免错误消息。我在第一个数字上也加了一个“.0”。