On Apr 9, 2011, at 9:09 AM, Andres Valloud wrote:

> At the end of the day, we still insist on expecting there won't be loss of 
> information just because we wrote a decimal print string for a binary 
> floating point number.  One can get offended or irritated all one wants, but 
> the reality of the situation won't change.
> 
> I think the real solution to these "problems" is to implement decimal 
> floating point as per IEEE-754/2008.  \\

The MPFR lib seems to me (as far as I understand) is inspired by IEEE 754 

<SNIP>
MPFR is a portable library written in C for arbitrary precision arithmetic on 
floating-point numbers. It is based on the GNU MP library. It aims to provide a 
class of floating-point numbers with precise semantics. The main 
characteristics of MPFR, which make it differ from most arbitrary precision 
floating-point software tools, are:

        • the MPFR code is portable, i.e., the result of any operation does not 
depend on the machine word size mp_bits_per_limb (64 on most current 
processors);
        • the precision in bits can be set exactly to any valid value for each 
variable (including very small precision);
        • MPFR provides the four rounding modes from the IEEE 754-1985 
standard, plus away-from-zero, as well as for basic operations as for other 
mathematical functions.

....


The following five rounding modes are supported:

        • MPFR_RNDN: round to nearest (roundTiesToEven in IEEE 754-2008),
        • MPFR_RNDZ: round toward zero (roundTowardZero in IEEE 754-2008),
        • MPFR_RNDU: round toward plus infinity (roundTowardPositive in IEEE 
754-2008),
        • MPFR_RNDD: round toward minus infinity (roundTowardNegative in IEEE 
754-2008),
        • MPFR_RNDA: round away from zero (experimental).

The ‘round to nearest’ mode works as in the IEEE 754 standard: in case the 
number to be rounded lies exactly in the middle of two representable numbers, 
it is rounded to the one with the least significant bit set to zero. For 
example, the number 2.5, which is represented by (10.1) in binary, is rounded 
to (10.0)=2 with a precision of two bits, and not to (11.0)=3. This rule avoids 
the drift phenomenon mentioned by Knuth in volume 2 of The Art of Computer 
Programming (Section 4.2.2).
</SNIP>


> Then you can write something like 1.2345 and know for a fact the number 
> represented is *exactly* 1.2345. At least one VisualWorks platform already 
> supports decimal floating point in hardware (IBM's POWER line).  C99 
> extensions exist at least in draft form to extend C so that it supports 
> decimal floating point.  IBM has released a GPL library in ANSI C that 
> implements the feature.  I am not sure what is the deal with the license and 
> if you can e.g.: interface to it without making your whole Smalltalk GPL.
> 

MPFR is LGPL, so linking that in the VM or using it via FFI is no problem 
license wise.

        Marcus


--
Marcus Denker  -- http://www.marcusdenker.de
INRIA Lille -- Nord Europe. Team RMoD.


Reply via email to