Interval Arithmetic

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 29 14:37:41 PDT 2015


On Tuesday, 29 September 2015 at 21:04:06 UTC, Wulfrick wrote:
> Is there an interval arithmetic library in D? I couldn’t find 
> one.
None I am aware of.
>
> In case I had to write my own, I understand that the IEEE 
> standard floating point arithmetic provides operations for 
> rounding up or down certain operations like summing, 
> subtracting, etc. (thus overriding the default behavior of 
> rounding to nearest representable).
>
> How do I access this functionality in D? At first I thought 
> that std.math.nextDown and nextUp is what I needed, but not so. 
> Apparently these functions return the previous or next 
> representable *after* the calculation has been done.
>
> For example, I would like the value of x+y rounded in the 
> arithmetic towards -\infty, which may or may not be 
> nextDown(x+y).
>
> Any luck?
> Thanks for reading!

fencv.h  [1] + a few extern(C) declarations could work - changes 
the rounding mode.
Maybe there is an inline ASM solution, too.

I have never tried to use that from D. The FENV_ACCESS pragma 
could cause problems - don't know how to pass that info to a D 
compiler (never tried to figure it out).

It may be easier to generate an binding for an existing C/C++ 
lib, e.g. [2] (page is in German, but the downloadable tar.gz 
("komprimierte (gzipped) tar-Datei") contains an English readme. 
Boost also contains an interval arithmetic lib [3], but the use 
of C++ templates will most likely force you to write some glue 
code in C++...


[1] http://www.cplusplus.com/reference/cfenv/
[2] http://www.ti3.tuhh.de/keil/profil/ (GPL)
[3] 
http://www.boost.org/doc/libs/1_58_0/libs/numeric/interval/doc/interval.htm



More information about the Digitalmars-d-learn mailing list