This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: powf(float,float) function from math.h on ARM32-bit platform


On 07/30/2013 02:59 PM, hemant wrote:

I have written a std code for ARM 32-bit platform using math.h library and
float=powf(float,float) function. When I give input to my system as 100 ^
4.4 it gives me answer as 630957632.0000 (as float) whereas calculator in
WindowsXP gives answer as 630957344.48019324943436013662234.

I just want to know which one is more accurate ????  why is difference ?????
on what things accuracy depends????

Also what do we mean by "arbitrary"-precision??? I have read such word on
MSDN help forums.

how much accurate is my system???? how to improve accuracy??????
You should read:
http://en.wikipedia.org/wiki/IEEE_754

The reason is that 4.4 is not accurately represented
in binary. This is like 1/3 which isn't accurately represented
in decimal.

To calculate the impact of this inaccuracy, you need to
consider the structure of float. Float has 23 bits
fraction+one leading '1' bit. This means that  you have
a 24 bit significand. Assuming 'round to nearest'
    error= 4.4* 2.0^{-24}
And the float value is around 4.4+/- error.

I computed this with 'bc' using scale=100 and got
100^(4.4+error)-100^4.4 = 762.0...
100^(4.4-error)-100^4.4 = -762.0...

Before even considering the inaccuracy of assigning
pow's result to float, you get an answer which can be
off by +/- 762.

Also, since pow(b,e) is implemented, as far as I know,
by exp(log(b)*e) you've got 3 operations and not one,
which add up their inaccuracies. So your *theoretical*
accuracy is even lower, much lower since most
inaccuracies are accumulated to the argument of 'exp'.
It's probably around +/-2286.

This explains why you've got a result which is off  by
nearly 300. It could have been much worse.

Michael


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]