From: Robert Roessler <roessler@rftp.com>
To: Erik de Castro Lopo <ocaml-erikd@mega-nerd.com>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Need for a built in round_to_int function
Date: Sun, 20 Feb 2005 20:34:14 -0800 [thread overview]
Message-ID: <421964C6.3080102@rftp.com> (raw)
In-Reply-To: <20050221125103.4b7132f8.ocaml-erikd@mega-nerd.com>
Erik de Castro Lopo wrote:
> On Sun, 20 Feb 2005 16:00:53 -0800
> Robert Roessler <roessler@rftp.com> wrote:
> ...
>>You, on the other hand, are willing to make an assumption regarding
>>the hardware rounding mode - [presumably] that it is set to the
>>power-on default of "Round to nearest, or to even if equidistant",
>>which may not be unreasonable - it just needs to be explicit that this
>>*is* the assumption, and that you have a way of verifying (or at least
>>reason to believe) that other software components in your app's
>>environment are not invalidating this assumption.
>
>
>>From the lrint manpage on Linux:
>
> These functions round their argument to the nearest integer value,
> using the current rounding direction. If x is infinite or NaN, or if
> the rounded value is outside the range of the return type, the numeric
> result is unspecified. A domain error may occur if the magnitude of x
> is too large.
>
> I would suggest something similar for the proposed O'Caml function.
Exactly like the "FIST[P]" instruction without explicit control word
saving, setting and restoring - which is believable, since according
to your first post, your reference implementation is done this way.
>>The fact that the default hardware rounding mode does NOT match "(int)
>>floor (f + 0.5)" should also be mentioned... the "+ 0.5" attempts to
>>do what the hardware would call "Round up (toward +infinity)"
>
>
> Careful, that could very easily be confused with the C functions ceil().
Umm, 2 of the IEEE hardware rounding modes *do* seem to match floor()
and ceil()... it is probably not a coincidence. :)
>>This could take the form of a compiler switch exactly like "/QIfist",
>
>
> A compiler switch is significantly more complicated than my proposal
> for a new built-in function with a well defined behaviour.
>
> The compiler switch causes all int_to_float to behave like a round
> instead of a truncate. My proposal allows a single file to have
> both behaviours.
Actually, emulating the VC7 "/QIfist" does NOT cause "all int_to_float
to behave like a round instead of a truncate" - it does exactly what
we are already talking about: do the int_of_float with a "bare"
FIST[P], operating in whatever rounding mode the hardware is already
in (presumably one we want and expect it to be in).
>>Of course, if something like this were to added to ocamlopt (for
>>target architectures using IEEE floating point), code (an additional
>>bytecode op?) emulating the same behavior could be added to the
>>runtime to maintain consistency across the interpreted and native
>>operating environments - or not.
>
>
> I believe that the bytecode interpreter simply uses the definitions
> supplied by ocamlopt. Once ocamlopt has this functionality there
> is not much else required to allow the interpretter to use the same
> functionality.
The bytecode interpreter has nothing to do with ocamlopt... in fact,
the primitive for doing int_of_float is precisely
return Val_long((long) Double_val(f));
which will perform a "truncate" operation for the conversion, since
that is what the C standard requires. :)
Robert Roessler
roessler@rftp.com
http://www.rftp.com
next prev parent reply other threads:[~2005-02-21 4:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-20 20:22 Erik de Castro Lopo
2005-02-21 0:00 ` [Caml-list] " Robert Roessler
2005-02-21 1:51 ` Erik de Castro Lopo
2005-02-21 4:34 ` Robert Roessler [this message]
2005-02-21 6:50 ` Erik de Castro Lopo
2005-02-21 11:54 ` Erik de Castro Lopo
2005-02-21 16:00 ` Xavier Leroy
2005-02-22 7:23 ` Erik de Castro Lopo
2005-02-21 16:01 ` Hendrik Tews
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=421964C6.3080102@rftp.com \
--to=roessler@rftp.com \
--cc=caml-list@yquem.inria.fr \
--cc=ocaml-erikd@mega-nerd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox