Can't make natural logs work in java?

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
7 replies · 4K views
breebreebran
Messages
12
Reaction score
0
I'm trying to learn java. So I'm practicing what I've learned so far by making a calculator to do formulas I learned in my finance class.
But it's not working right now.

Code:
 case ("loan length"):
 Scanner inp_ll = new Scanner(System.in);
 System.out.print("What is the monthly payment? ");
 monthlypmt = inp_ll.nextDouble();
 System.out.print("What is the rate? ");
 percent = inp_ll.nextDouble();
 rate = percent/100;
 System.out.print("What is the loan amount? ");
 principal = inp_ll.nextDouble();
 answer = (Math.log(monthlypmt/principal)-Math.log((monthlypmt/principal)-(rate/12)))/12*Math.log(1+rate/12);
 System.out.print(("The loan length is: ")+ (answer));
 break;

Here's one input I tested

What is the monthly payment? 212
What is the rate? 12.7
What is the loan amount? 3000
The loan length is: 1.4233611456294047E-4

And then another input using bigger numbers yields

What is the monthly payment? 350
What is the rate? 13
What is the loan amount? 150000
The loan length is: NaN


Did I just do the formula wrong?
I looked it over a bunch and it looks right to me.
I even erased it and tried typing it in again.

Here's the original formula
34oea7a.jpg


where ln is natural log, m is monthly payment, p is principal and r is rate.
 
Physics news on Phys.org
AlephZero said:
In Java, a/b*c means (a/b)*c, not a/(b*c).

I would say it is not limited to Java.
 
Borek said:
I would say it is not limited to Java.
Yes, it's a rule all of use use. The BIDMUS rule.
 
AlephZero said:
Did you read the section "Exceptions to the standard" in that link?

I agree most programming languages the BIDMUS rules, but not all - for example APL.

I was referring to mathematicians.
 
The safest solution is to always use parens around all factors and terms to make it explicitly clear what the math precedence is supposed to be.

This is especially true with operator precedence rules of the more arcane operators like the boolean and bitshift operators.

For Java, the operator precedence is (now entering the BIDMAS zone):

http://en.wikipedia.org/wiki/Operator_precedence

Java has some interesting gotchas too like when you use == vs = or && vs & ... that may not issue compile-time errors but do something quite unexpected because you typed in the wrong operator.