double precision calculations in single precision code

Branko Drevenšek branko.drevensek@gmail.com
Wed Oct 31 16:35:00 GMT 2012


Hi.

Thanks to all of you for answers. Without --enable-newlib-hw-fp it looks 
much better.

BTW: Jeff, if you are fixing documents, maybe you can also add a note to 
FAQ (from where I got that switch in first place).

Regards.
Branko

On 10/24/2012 06:39 PM, Jeff Johnston wrote:
> On 10/24/2012 12:09 PM, marco atzeri wrote:
>> On 10/24/2012 1:30 PM, Branko Drevenšek wrote:
>>> Hi.
>>>
>>> We have Newlib ported to our architecture. One of configurations 
>>> that we
>>> support is hardware single precision and soft-float double precision.
>>>
>>> I have noticed unexpected double precision soft-float function calls in
>>> simple code like x = sinf(y), where both x and y are single precision.
>>>
>>> I have noticed that Newlib sinef function (libm/mathfp/sf_sine.c)
>>> contains lines like:
>>>    /* Calculate the exponent. */
>>>    if (y < 0.0)
>>>      N = (int) (y * ONE_OVER_PI - 0.5);
>>>    else
>>>      N = (int) (y * ONE_OVER_PI + 0.5);
>>>
>>> While y * ONE_OVER_PI gets calculated in single precision, that +- 0.5
>>> causes the result of multiplication being converted to double and then
>>> addition is done in double using soft-float. For our case this has big
>>> performance penalty and also requires double soft-float functions to be
>>> linked in, causing binary to grow.
>>>
>>> Is 0.5 (instead of 0.5f) used by purpose or is that just wrong (and
>>> needs fixing)? Where did those math. functions originate from?
>>>
>>
>> I bet from the double version, that use exactly the same lines
>> and they are likely in that form from the begin in 98.
>> On CVS there is no change from inital import in 2000..
>>
>
> These functions were an experiment from a Red Hat intern for running 
> on a system with floating-point math instructions.  The algorithms 
> chosen for some of the functions don't provide close to adequate 
> accuracy for the large range of input possibilities and in the end, 
> they didn't  show any real performance improvements in testing.
>
> Consider the experiment a failure.  I long ago said I was going to 
> remove them but I thought somebody might be interested in further 
> experimentation and possibly fixing the algorithms.  I will add a 
> README in the directory, comment out the configuration option, and 
> also add an explanation in the top-level README so nobody else wastes 
> their time.
>
> -- Jeff J.
>
>
>>  > Best regards,
>>  > Branko Drevensek
>>
>>
>



More information about the Newlib mailing list