On Tue, Feb 27, 2007 at 06:26:18AM -0800, Geoffrey Broadwell wrote:
: What happens when you cast between low-level types?  If the source value
: is out of range of the destination type, do you get:
: 
: 1. An exception?
: 2. Clip to finite range always?
: 3. Clip to finite range for ints, clip to infinities for nums?
: 4. Exception when dest is int, clip to infinities when dest is num? 
: 5. Copy bits that fit from source to dest and reinterpret?
: 
: Personally, I think option 1 or option 4 make the most sense for
: conversion between int, uint, num, and complex types, while either
: option 1 or option 5 make sense for conversion to/from buf types.

Basically it's 4, except that the exception is a warning (which is
a form of resumable exception in Perl 6.)

: Also, when casting from a num type to an int type, is there a way to
: specify desired rounding/truncation behavior in a way that allows the
: most efficient code under the covers, rather than making a side trip
: through Num and Int?

Depends on what you call to perform the rounding.  Could be anything
from a macro to a multimethod.  The default round() is presumably a
multimethod on Num that produces an Int, but you can always define
more specific multis or functions or macros, or whack the compiler
upside the head with a pragma.

Larry

Reply via email to