[comp.lang.fortran] Floating remainder

len@elxsi.UUCP (Len Mills) (12/01/88)

In article <1034@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) writes:
>> |In article <1032@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) writes:
>> |...
>> |> suppose we want to
>> |>divide a by b, obtaining an integer result i and a remainder c.  I know
>> |>of no machine with this instruction, and this is not that unusual an 
>> |>instruction to demand.  It is cheap in hardware, and extremely expensive
>> |>in software--at least 4 instructions.
>I do not know if I made it clear in my initial posting, but the problem
>arises if the types of a, b, and c are floating.  Not that the quote from
>my paper specifically has i an integer.

If I understand correctly, what you are looking for is a Floating Point
Remainder instruction.  The ELXSI 6400 series include the FREM instructions
for the various IEEE floating point formats.  The behavior of these
instructions is:

   Divide Rz by Ry to produce (for non-zero quotients) a new value in Rx
   which consists of the low-order 64 bits of the rounded two's complement
   integer quotient, and replacing Rz by the remainder in floating-point
   form.  The remainder is defined to be Rz - (( Rz/Ry rounded to the
   nearest integer) * Ry), such that -0.5 * abs (divisor) <= remainder <=
   +0.5 * abs (divisor).

Of course, the RISCyness of this design is open to debate (:-).


-- 

Len Mills ...
{uunet,ucbvax!sun,lll-lcc!lll-tis,altos86,bridge2}!elxsi!len