Thursday, December 25, 2014

Finding log() without using Math.log()


Finding log for any given base and value in JAVA


import java.util.Scanner;

public class LogSolution {
static int scaleSize=1000000;
 public static void main(String[] args) throws Exception {
  Scanner in = new Scanner(System.in);
  double b = in.nextDouble();
  double T = in.nextDouble();

 //As per Logarithmic base change rule
  System.out.println(Math.log(T) / Math.log(b));

//Logarithm without Math.log() API
  System.out.println(log(b, T, 0));

 }

 private static double log(double base, double n, double log) {

  if (n == 1)
   return 0;

  if (n < base) {
   //Log base switch rule
   return 1 / log(n, base, log);
  }
  double value = 1;
  do {
   value *= base;
   log++;
  } while (value < n);

  if (value == n) {
   return log;
  }

  log--;
  return log(base, n, log, 1);
 }

 private static double log(double base, double n, double log,
   double precision) {
  double newPrecision = precision * 0.1d;

  double prevLog = log;
  for (int i = 1; i <= 10; i++) {
   double newLog = log + (i * newPrecision);
   double n2 = Math.pow(base, newLog);
   
   if (n == n2)
    return newLog;

   if (n < n2) {
    if (1 != (int) (newPrecision * scaleSize))
     return log(base, n, prevLog, newPrecision);
    else
     return prevLog;
   }
   prevLog = newLog;
  }

  return log;
 }
}


Logarithm rules

Logarithm product rule

logb(x × y) = logb(x) + logb(y)

Logarithm quotient rule

logb(x / y) = logb(x) - logb(y)

Logarithm power rule

logb(x ^ y) = y × logb(x)

Logarithm base switch rule

logb(c) = 1 / logc(b)

Logarithm base change rule

logb(x) = logc(x) / logc(b)

References:

RapidTables |
MATHisFUN

No comments:

Post a Comment

Recent Posts

Unix Commands | List all My Posts

Texts

This blog intended to share the knowledge and contribute to JAVA Community such a way that by providing samples and pointing right documents/webpages. We try to give our knowledege level best and no guarantee can be claimed on truth. Copyright and Terms of Policy refer blogspot.com