chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] 32 bit integers?


From: Kon Lovett
Subject: Re: [Chicken-users] 32 bit integers?
Date: Tue, 22 May 2007 13:56:56 -0700


On May 22, 2007, at 12:33 PM, Dan Muresan wrote:


<snip>

Actually, I haven't found the 31-bit format documented anywhere (maybe I missed it). I thought that at least normal C int's would always fit in a fixnum. It was an unpleasant surprise to see an expression like (logior flags ...) fail, when "flags" was promoted to a flonum.

If you use one of integer unsigned-integer integer32 unsigned- integer32 integer64 long unsigned-long as a foreign parameter/ return type Chicken will automatically convert a flonum integer to/ from the native type.

Yes, but flonum's can't be used in some contexts:

* bit ops

* modulo-2^32 arithmetic (i.e. C-like 32-bit wraparound arithmetic)

I don't see a way to hack these using flonums. Bignums would solve the problem but they're slow.

The bitwise-* procedures & arithmetic-shift are supposed to work w/ fixnums & integer flonums. The magnitude of a flonum is converted to a C unsigned int (on 32 bit machines, u_int64_t otherwise), operated upon, then the result is returned as a fixnum or flonum, depending on the precision of the operation result.

The modulo-2^32 is a problem though.

Sorry,
Kon


<snip>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]