AROSAmiga Research OS

Previous Next Top of Manual blank.gif

AROS - The Amiga Research OS


Documentation
    AutoDocs
        Exec.library
        MathFFP.library
        MathIEEEDoubleBase
        MathIEEEDoubleTrans
        MathIEEESingleBase
        MathIEEESingleTrans
            IEEESPSincos
            IEEESPPow
            IEEESPAcos
            IEEESPCosh
            IEEESPCos
            IEEESPSqrt
            IEEESPSinh
            IEEESPFieee
            IEEESPLog10
            IEEESPSin
            IEEESPTan
            IEEESPTieee
            IEEESPLog
            IEEESPExp
            IEEESPAsin
            IEEESPTanh
            IEEESPAtan
        MathTrans
NAME
#include <aros/libcall.h>
#include <proto/mathieeesingbas.h>
#include <proto/mathieeesingtrans.h>
#include <proto/exec.h>
#include <exec/types.h>
#include <libraries/mathieeesp.h>

float IEEESPSqrt ()

SYNOPSIS
float y

FUNCTION
Calculate square root of IEEE single precision number
INPUTS
y
IEEE single precision floating point number

RESULT
IEEE single precision number flags: zero : result is zero negative : 0 overflow : square root could not be calculated
NOTES
EXAMPLE

BUGS
SEE ALSO
MathIEEESingleTrans

INTERNALS
ALGORITHM:
First check for a zero and a negative argument and take
appropriate action.
y = M * 2^E

Exponent is an odd number:
y = ( M*2 ) * 2^ (E-1)
Now E' = E-1 is an even number and
-> sqrt(y) = sqrt(M)   * sqrt(2)   * sqrt (2^E')
= sqrt(M)   * sqrt(2)   * 2^(E'/2)
(with sqrt(M*2)>1)
= sqrt(M)   * sqrt(2)   * 2^(E'/2)
= sqrt(M)   * 1/sqrt(2) * 2^(1+(E'/2))
= sqrt(M/2)             * 2^(1+(E'/2))


Exponent is an even number:
-> sqrt(y) = sqrt(M) * sqrt (2^E) =
= sqrt(M) * 2^(E/2)

Now calculate the square root of the mantisse.
The following algorithm calculates the square of a number + delta
and compares it to the mantisse. If the square of that  number +
delta is less than the mantisse then keep that number + delta.
Otherwise calculate a lower offset and try again.
Start out with number = 0;


Exponent = -1;
Root = 0;
repeat
{
if ( (Root + 2^Exponent)^2 < Mantisse)
Root += 2^Exponent
Exponent --;
}
until you`re happy with the accuracy


Previous Next Top of Manual blank.gif
minilogo.gif

Amiga® is a trademark of Amiga Inc. All other trademarks belong to their respective owners.

Copyright © AROS - The Amiga Research OS
All Rights Reserved
Comments to webmaster: digulla@aros.org
Generated: Tue Sep 4, 2001