Fixnum::{MIN,MAX}

This may be silly, considering that Fixnums are converted to Bignums if
necessary, but is there no room for having MIN and MAX constants for
Fixnums? This is my C talking, but it’s kind of nice to have these
kinds of limits for certain algorithms and “default” values. Any
input?,
        nikolai

···

--
Nikolai Weibull: now available free of charge at http://bitwi.se/!
Born in Chicago, IL USA; currently residing in Gothenburg, Sweden.
main(){printf(&linux["\021%six\012\0"],(linux)["have"]+"fun"-97);}

I too have wished for them in the past.

James Edward Gray II

···

On Jul 27, 2005, at 4:00 PM, Nikolai Weibull wrote:

This may be silly, considering that Fixnums are converted to Bignums if
necessary, but is there no room for having MIN and MAX constants for
Fixnums? This is my C talking, but it’s kind of nice to have these
kinds of limits for certain algorithms and “default” values. Any
input?,

awesome! i have this everywhere:

   class Fixnum
     N_BYTES = [42].pack('i').size
     N_BITS = N_BYTES * 8
     MAX = 2 ** (N_BITS - 2) - 1
     MIN = -MAX - 1
   end

cheers.

-a

···

On Thu, 28 Jul 2005, Nikolai Weibull wrote:

This may be silly, considering that Fixnums are converted to Bignums if
necessary, but is there no room for having MIN and MAX constants for
Fixnums? This is my C talking, but it’s kind of nice to have these
kinds of limits for certain algorithms and “default” values. Any
input?,
       nikolai

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
My religion is very simple. My religion is kindness.
--Tenzin Gyatso

===============================================================================

Ara.T.Howard wrote:

This may be silly, considering that Fixnums are converted to Bignums if
necessary, but is there no room for having MIN and MAX constants for
Fixnums? This is my C talking, but it’s kind of nice to have these
kinds of limits for certain algorithms and “default” values. Any
input?,
       nikolai

awesome! i have this everywhere:

   class Fixnum
     N_BYTES = [42].pack('i').size
     N_BITS = N_BYTES * 8
     MAX = 2 ** (N_BITS - 2) - 1
     MIN = -MAX - 1
   end

cheers.

-a

Signed or unsigned max?

Solaris 10:

/* maxnum.c */
#include <stdio.h>
#include <values.h>

int main(){
    printf("Max int: %i\n", MAXINT);
    printf("Max long: %li\n", MAXLONG);

    return 0;
}

djberge@~/programming/C-568>gcc -Wall -o maxnum maxnum.c
djberge@~/programming/C-569>./maxnum
Max int: 2147483647
Max long: 2147483647

djberge@~/programming/C-570>gcc -Wall -m64 -o maxnum maxnum.c
djberge@~/programming/C-571>./maxnum
Max int: 2147483647
Max long: 9223372036854775807

Regards,

Dan

···

On Thu, 28 Jul 2005, Nikolai Weibull wrote:

Ara.T.Howard wrote:

This may be silly, considering that Fixnums are converted to Bignums if
necessary, but is there no room for having MIN and MAX constants for
Fixnums? This is my C talking, but it’s kind of nice to have these
kinds of limits for certain algorithms and “default” values. Any
input?,
       nikolai

awesome! i have this everywhere:

   class Fixnum
     N_BYTES = [42].pack('i').size
     N_BITS = N_BYTES * 8
     MAX = 2 ** (N_BITS - 2) - 1
     MIN = -MAX - 1
   end

cheers.

-a

Signed or unsigned max?

maybe we are talking at cross purposes: as far as i know there is no such as an
'unsigned' Fixnum - we only have signed fixnums which loses one bit and the
VALUE/Fixnum thing which loses another. so i assumed the OP wanted to know the
largest/smallest value that could be represented by a fixnum:

   harp:~ > cat a.rb
   class Fixnum
     N_BYTES = [42].pack('i').size
     N_BITS = N_BYTES * 8
     MAX = 2 ** (N_BITS - 2) - 1
     MIN = -MAX - 1
   end

   p(Fixnum::MAX)
   p(Fixnum::MAX.class)
   p((Fixnum::MAX + 1).class)

   p(Fixnum::MIN)
   p(Fixnum::MIN.class)
   p((Fixnum::MIN - 1).class)

   harp:~ > ruby a.rb
   1073741823
   Fixnum
   Bignum
   -1073741824
   Fixnum
   Bignum

make sense?

Solaris 10:

/* maxnum.c */
#include <stdio.h>
#include <values.h>

int main(){
  printf("Max int: %i\n", MAXINT);
  printf("Max long: %li\n", MAXLONG);

  return 0;
}

djberge@~/programming/C-568>gcc -Wall -o maxnum maxnum.c
djberge@~/programming/C-569>./maxnum
Max int: 2147483647
Max long: 2147483647

djberge@~/programming/C-570>gcc -Wall -m64 -o maxnum maxnum.c
djberge@~/programming/C-571>./maxnum
Max int: 2147483647
Max long: 9223372036854775807

sure - but these are ints not fixnums ?

cheers.

-a

···

On Thu, 28 Jul 2005, Daniel Berger wrote:

On Thu, 28 Jul 2005, Nikolai Weibull wrote:

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
My religion is very simple. My religion is kindness.
--Tenzin Gyatso

===============================================================================

Daniel Berger wrote:

Ara.T.Howard wrote:

> > This may be silly, considering that Fixnums are converted to
> > Bignums if necessary, but is there no room for having MIN and MAX
> > constants for Fixnums? This is my C talking, but it’s kind of
> > nice to have these kinds of limits for certain algorithms and
> > “default” values. Any input?,
> > nikolai

> awesome! i have this everywhere:
>
> class Fixnum
> N_BYTES = [42].pack('i').size
> N_BITS = N_BYTES * 8
> MAX = 2 ** (N_BITS - 2) - 1
> MIN = -MAX - 1
> end
>
> cheers.

Signed or unsigned max?

I don’t know if you’re trying to be clever, but as far as I know, it’d
be the value of LONG_MAX, as that’s how Fixnums are currently being
stored. And I don’t see how it matters if you’re on a 32 or 64 bit
machine (below), as all one’s interested in is the maximum value that
can be stored in a Fixnum (for sentinel values and so on). Ara’s
suggestion is a bit flawed, as it assumes a two’s-complement arithmetic
for the MIN calculation, but who can blame him? :slight_smile:

I was perhaps not so much saying that we _must_ have MAX and MIN of
Fixnums, as a way of having good sentinel values when dealing with
Fixnums. I was half-expecting a whole thread on duck-typing,
meta-programming, IoC, or other “possible” solutions to such a problem,
        nikolai

···

> On Thu, 28 Jul 2005, Nikolai Weibull wrote:

djberge@~/programming/C-570>gcc -Wall -m64 -o maxnum maxnum.c
djberge@~/programming/C-571>./maxnum
Max int: 2147483647
Max long: 9223372036854775807

--
Nikolai Weibull: now available free of charge at http://bitwi.se/\!
Born in Chicago, IL USA; currently residing in Gothenburg, Sweden.
main(){printf(&linux["\021%six\012\0"],(linux)["have"]+"fun"-97);}

Ara.T.Howard wrote:

<snip>

maybe we are talking at cross purposes: as far as i know there is no such as an
'unsigned' Fixnum - we only have signed fixnums which loses one bit and the
VALUE/Fixnum thing which loses another. so i assumed the OP wanted to know the
largest/smallest value that could be represented by a fixnum:

   harp:~ > cat a.rb
   class Fixnum
     N_BYTES = [42].pack('i').size
     N_BITS = N_BYTES * 8
     MAX = 2 ** (N_BITS - 2) - 1
     MIN = -MAX - 1
   end

   p(Fixnum::MAX)
   p(Fixnum::MAX.class)
   p((Fixnum::MAX + 1).class)

   p(Fixnum::MIN)
   p(Fixnum::MIN.class)
   p((Fixnum::MIN - 1).class)

   harp:~ > ruby a.rb
   1073741823
   Fixnum
   Bignum
   -1073741824
   Fixnum
   Bignum

make sense?

Solaris 10:

/* maxnum.c */
#include <stdio.h>
#include <values.h>

int main(){
  printf("Max int: %i\n", MAXINT);
  printf("Max long: %li\n", MAXLONG);

  return 0;
}

djberge@~/programming/C-568>gcc -Wall -o maxnum maxnum.c
djberge@~/programming/C-569>./maxnum
Max int: 2147483647
Max long: 2147483647

djberge@~/programming/C-570>gcc -Wall -m64 -o maxnum maxnum.c
djberge@~/programming/C-571>./maxnum
Max int: 2147483647
Max long: 9223372036854775807

sure - but these are ints not fixnums ?

True.

But if we add Fixnum::MIN/MAX, don't we have to add Integer::MIN/MAX and Bignum::MIN/MAX? What about Numeric or Float?

My gut feeling is that this will lead to confusion. Maybe I'm wrong, though.

Dan

···

On Thu, 28 Jul 2005, Daniel Berger wrote:

you have a point. perhaps

   require 'limits'

   p Bignum::MAX
   p Integer::MAX

etc. that was new limits could be added later...

btw. is there a Bignum::MAX?

-a

···

On Thu, 28 Jul 2005, Daniel Berger wrote:

True.

But if we add Fixnum::MIN/MAX, don't we have to add Integer::MIN/MAX and Bignum::MIN/MAX? What about Numeric or Float?

My gut feeling is that this will lead to confusion. Maybe I'm wrong, though.

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
My religion is very simple. My religion is kindness.
--Tenzin Gyatso

===============================================================================

Ara.T.Howard wrote:

···

On Thu, 28 Jul 2005, Daniel Berger wrote:

True.

But if we add Fixnum::MIN/MAX, don't we have to add Integer::MIN/MAX and Bignum::MIN/MAX? What about Numeric or Float?

My gut feeling is that this will lead to confusion. Maybe I'm wrong, though.

you have a point. perhaps

   require 'limits'

   p Bignum::MAX
   p Integer::MAX

etc. that was new limits could be added later...

btw. is there a Bignum::MAX?

-a

There is if there's an Integer::MAX. :smiley:

Dan

Ara.T.Howard wrote:

btw. is there a Bignum::MAX?

Sure, though its value would fluctuate with the amount of memory
currently available,
        nikolai

···

--
Nikolai Weibull: now available free of charge at http://bitwi.se/\!
Born in Chicago, IL USA; currently residing in Gothenburg, Sweden.
main(){printf(&linux["\021%six\012\0"],(linux)["have"]+"fun"-97);}

it does seems that way - so maybe impossibleto determine/store since saying

class Bignum
   MAX = do_something_to_determine
end

would exhaust memory...

an estimate as string perhaps?

-a

···

On Thu, 28 Jul 2005, Nikolai Weibull wrote:

Ara.T.Howard wrote:

btw. is there a Bignum::MAX?

Sure, though its value would fluctuate with the amount of memory
currently available,

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
My religion is very simple. My religion is kindness.
--Tenzin Gyatso

===============================================================================