aspose file tools*
The moose likes Java in General and the fly likes Math.log problem in JDK1.4 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of EJB 3 in Action this week in the EJB and other Java EE Technologies forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Math.log problem in JDK1.4" Watch "Math.log problem in JDK1.4" New topic
Author

Math.log problem in JDK1.4

Suganthi Velliah
Greenhorn

Joined: Apr 30, 2007
Posts: 17
Hi All,



While calculating logarithm values in JDK1.4 it returns some unpredicted values. As Math.log() returns double so there is loss of precision and exact log base 10 values cannot be calculated.



For a CR in TP, a formula was given as:


DispCode = Int ( -1 * log10( abs(LsbRsln)))

which is written in Java as,


int dispcode = (int) (-1 * (Math.log(Math.abs(Double.parseDouble(lsbrsln))) / Math.log(10)));



For example, if lsbrsln = 0.001, the formula is expected to return 3, instead it returns 2. The following part of the formula



Math.log (Math.abs (Double.parseDouble(0.001))) / Math.log(10) is returning -2.999999� and finally the formula is returning 2 while casting it into int.



In JDK1.5 we have Math.log10 method itself for calculating logbase10 values. But since we need to support JDK1.4 also we were not able to use that also.

Please let me know if you have the solution.
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 39535
    
  27
Using an "(int)" cast to create an integer from a floating point number is rather crude, especially since floating point arithmetic on computers is fundamentally imprecise (see #20 here to understand why). Depending on your circumstances, Math.round, Math.ceil or Math.floor may be a better way to do that.

Using the BigDecimal class may also help.


Ping & DNS - updated with new look and Ping home screen widget
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Math.log problem in JDK1.4
 
Similar Threads
Calculating Change
Math.log problem in JDK1.4
decimal to binary number converter
Collections.sort(List, Comparator)??
Conflicting Mouse Events