calculating the a bigdecimal to the power of double

M

manzur

I have a bigdecimal and a double value,say

Bigdecimal bd = 599999.45;
double d= 5.9;

i want to do 599999.45^5.9

Note:I dont want to convert bigdecimal to double

thanks in advance.
 
T

Thomas Hawtin

manzur said:
I have a bigdecimal and a double value,say

Bigdecimal bd = 599999.45;
double d= 5.9;

i want to do 599999.45^5.9

Note:I dont want to convert bigdecimal to double

Raising a decimal to the power of 5.9 isn't going to result in a number
expressible as a decimal. If you want more accuracy than provided by
double, I guess you could use a series expansion.

Tom Hawtin
 
E

Eric Sosman

manzur wrote On 04/19/06 12:15,:
I have a bigdecimal and a double value,say

Bigdecimal bd = 599999.45;
double d= 5.9;

i want to do 599999.45^5.9

Note:I dont want to convert bigdecimal to double

Suggestion #1: Convert it to double anyhow, despite
your dislike of the approach.

Suggestion #2: Re-examine what you're trying to do.
Is it really a good idea to use a BigDecimal here?

Suggestion #3: Get out your Numerical Methods books
and start writing implementations for transcendental
functions of BigDecimal values, using add() and multiply()
and the other methods of BigDecimal to perform the
underlying arithmetic. (Warning: This will probably not
be a project, but a PROJECT ...)
 
R

Roedy Green

Bigdecimal bd = 599999.45;
double d= 5.9;

That won't compile for two reasons.

1. you spelled BigDecimal incorrectly

2. BigDecimal is not a primitive. You need to use a method or
constructor to create a BigDecimal value.
 
P

Patricia Shanahan

manzur said:
I have a bigdecimal and a double value,say

Bigdecimal bd = 599999.45;
double d= 5.9;

i want to do 599999.45^5.9

Note:I dont want to convert bigdecimal to double

thanks in advance.

As already said, non-integer powers in BigDecimal would be a significant
project.

Maybe there is a less drastic solution to your problem. Could you
explain why you don't want to do the power calculation in double? That
may give someone ideas for alternatives.

Patricia
 
E

EJP

Patricia said:
As already said, non-integer powers in BigDecimal would be a significant
project.

Indeed. I implemented it years ago for a COBOL compiler and it took
several weeks. Even finding the constants for the polynomials is a
project in itself: for example, they are in a book which is out of print
and selling for large enough prices that I don't want to name it ;-) or
you can compute them yourself but then you have just started several
*more* projects.
 
M

manzur

Patricia said:
As already said, non-integer powers in BigDecimal would be a significant
project.

Maybe there is a less drastic solution to your problem. Could you
explain why you don't want to do the power calculation in double? That
may give someone ideas for alternatives.

Patricia


iam writing code for some banking applications which demand accuracy
in money
values.For money values iam using Bigdecimal. If i convert my
bigdecimal to double i fear of inaccuracy(In cases where i deal with
huge values greater than double)
 
P

Patricia Shanahan

manzur said:
iam writing code for some banking applications which demand accuracy
in money
values.For money values iam using Bigdecimal. If i convert my
bigdecimal to double i fear of inaccuracy(In cases where i deal with
huge values greater than double)

You won't be dealing with values greater than double, because the
maximum double is bigger than 10^308. That is more than the probable
number of atoms in the observable universe.

However, it is entirely possible that you could get a wrong answer for
the least significant digit on large sums of money. Double is just about
precise enough to get the cents digit right on the US national debt in
dollars. If that is good enough, one solution might be to use double for
the exponentiation, but immediately convert back to BigDecimal. That
would avoid accumulating rounding errors during routine addition and
subtraction.

I'm a bit surprised by the use of exponentiation in this precise an
environment. For example, I would have expected compound interest to be
done a compounding period at a time, with the interest for each period
rounded according to fixed rules, then added to the balance.

Patricia
 
R

Roedy Green

iam writing code for some banking applications which demand accuracy
in money
values.For money values iam using Bigdecimal. If i convert my
bigdecimal to double i fear of inaccuracy(In cases where i deal with
huge values greater than double)

Hmm. What you might do is get a good initial approximation with
Math.pow on double. Then use a Newton-Raphson to home in on a very
accurate value.
 
C

Chris Uppal

Patricia said:
I'm a bit surprised by the use of exponentiation in this precise an
environment. For example, I would have expected compound interest to be
done a compounding period at a time, with the interest for each period
rounded according to fixed rules, then added to the balance.

Another possibility is that "perfect" precision is not required for /this
particular/ calculation. For instance in the UK any offer of a loan must be
accompanied by (besides the exact statement of interest, etc) an indicator
figure which is supposed to make it easier for people to compare offers with
different conditions. I forget the thing's name, and the rules for computing
it are complicated, but the point is that floating-point accuracy is entirely
adequate, even though it's a financial calculation.

-- chris
 
Joined
Dec 16, 2010
Messages
1
Reaction score
0
Implementation of BigDecimal to the power of BigDecimal

Hi,

I've just released a package with a method in for this, but for some reason the forum won't let me post a link until I have posted 50 messages, so I've mangled the URL. Hopefully you can decode it and find what you want:

http_www_geog_leeds_ac_uk/people/a.turner/src/andyt/java/generic/

I have released under LGPL, but could release with a different license if anyone has a problem with that.

Best wishes,

Andy
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top