Constante que indique el mayor entero representable?

Hola!, me refiero a la típica constante MAX_INT, como se llama en ruby?

Un saludo y gracias de antemano.

On Aug 14, 2007, at 2:02 PM, Marcos C. wrote:

Hola!, me refiero a la típica constante MAX_INT, como se llama en
ruby?

En Ruby tienes enteros de precision arbitraria:

irb(main):002:0> 2**1000
=>
107150860718626732094842504906000181056140481170553360744375038837035105
112493612249319837881569585812759467291755314682518714528569231404359845
775746985748039345677748242309854210746050623711418779541821530464749835
819412673987675591655439460770629145711964776865421676604298316526243868
37205668069376

Por debajo existen las clases Fixnum y Bignum, ambas hijas de
Integer, puesto que Ruby trata de usar enteros nativos (Fixnum)
mientras el numero quepa ahi. En cuanto te pasas salta a usar Bignums
que es mas caro. Esto es lo normal en lenguajes que tienen este tipo
de enteros, Lisp etc.

No hay interfaz que conozca para averiguar el maximo o minimo
representable por un Fixnum, aunque pueden calcularse a partir de
Fixnum#size.

– fxn

El Tuesday 14 August 2007 14:02:35 Marcos C. escribió:

Hola!, me refiero a la típica constante MAX_INT, como se llama en ruby?

No la conozco ¿no te vale definirla tú mismo?

Ciao

On Aug 14, 2007, at 11:21 PM, Sebastian D. wrote:

Asi que:

2**(0.size * 8 - 2) # => 1073741824

de donde se me ocurre que probablemente ruby utilice uno de los bits
para saber si es un big o un fixnum.

Es correcto Sebastian.

Los VALUES son enteros y los bits mas bajos son especiales, marcan si
el VALUE es un Fixnum, o bien nil, o bien false, …, unos cuantos
casos especiales. Si son 00 el VALUE se interpreta como un puntero.
Aqui se explica muy bien:

O'Reilly Media - Technology and Business Training

– fxn

El Tuesday 14 August 2007 23:21:49 Sebastian D. escribió:

Asi que de los 4 bytes (0.size) que usa para los enteros, uno lo
pierdes en el signo, y otro en el “tamaño”.

De la documentación de Fixnum:
A Fixnum holds Integer values that can be represented in a native
machine word
(minus 1 bit).

Ciao

Buenas! Pues muchas gracias a todos. Al final me quedo con lo de
2**(0.size * 8 - 2), aunque me parece bastante raro que no exista un
Max-fixnum y un Max-bignum.

La intuicion me dice que deberia ser algo como

2**(0.size * 8 - 1) # => 2147483648

Sin embargo:

(2**(0.size * 8 - 1)).class # => Bignum

Probando un poco:

(2**(0.size * 8 - 2)).class # => Fixnum

Asi que:

2**(0.size * 8 - 2) # => 1073741824

de donde se me ocurre que probablemente ruby utilice uno de los bits
para saber si es un big o un fixnum.

Asi que de los 4 bytes (0.size) que usa para los enteros, uno lo
pierdes en el signo, y otro en el “tamaño”.