Hola!, me refiero a la tÃpica constante MAX_INT, como se llama en ruby?
Un saludo y gracias de antemano.
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”.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs