caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] A grave bug in logical shift right op?
@ 2003-11-07  3:34 Eray Ozkural
  2003-11-07  3:46 ` [Caml-list] " Jed Davis
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Eray Ozkural @ 2003-11-07  3:34 UTC (permalink / raw)
  To: Ocaml

I'm using the debian package in testing....

orion:fealn-attack$ ledit ocaml
        Objective Caml version 3.07+2

# Printf.printf "%X" 0xffffffff;;
7FFFFFFF- : unit = ()
# Printf.printf "%lx" (Int32.of_int 0xffffffff);;
ffffffff- : unit = ()
# -1 lsr 24;;
- : int = 127
# Int32.shift_right_logical (Int32.of_int (-1)) 24;;
- : int32 = 255l

What's going on here? Something's eating the most significant bit in
both hexadecimal output routine and the logical shift right
operator. Somebody please help me! My cipher isn't working!!!

Confused,

-- 
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara  KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo  Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B  EA0F 7C07 AE16 874D 539C

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Caml-list] Re: A grave bug in logical shift right op?
  2003-11-07  3:34 [Caml-list] A grave bug in logical shift right op? Eray Ozkural
@ 2003-11-07  3:46 ` Jed Davis
  2003-11-07  3:53 ` [Caml-list] " Jacques Garrigue
  2003-11-07  3:58 ` Andrew Lenharth
  2 siblings, 0 replies; 5+ messages in thread
From: Jed Davis @ 2003-11-07  3:46 UTC (permalink / raw)
  To: caml-list

Eray Ozkural <exa@kablonet.com.tr> writes:

> I'm using the debian package in testing....
>
> orion:fealn-attack$ ledit ocaml
>         Objective Caml version 3.07+2
>
> # Printf.printf "%X" 0xffffffff;;
> 7FFFFFFF- : unit = ()
> # Printf.printf "%lx" (Int32.of_int 0xffffffff);;
> ffffffff- : unit = ()
> # -1 lsr 24;;
> - : int = 127
> # Int32.shift_right_logical (Int32.of_int (-1)) 24;;
> - : int32 = 255l
>
> What's going on here? Something's eating the most significant bit in
> both hexadecimal output routine and the logical shift right
> operator. Somebody please help me! My cipher isn't working!!!

The size of an int is one bit less than the machine's word size, so 31
bits on a 32-bit arch; this is because the internal representation of
an OCaml value uses the LSB to distinguish between an int (stored in
the top n-1 bits) and some other kind of object.


-- 
Jed Davis <jldavis@cs.oberlin.edu>  Selling of self: http://panix.com/~jdev/rs/
<jdev@panix.com>  PGP<-finger A098:903E:9B9A:DEF4:168F:AA09:BF07:807E:F336:59F9
\   "But life wasn't yes-no, on-off.  Life was shades of gray, and rainbows
/\   not in the order of the spectrum."  -- L. E. Modesitt, Jr., _Adiamante_

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] A grave bug in logical shift right op?
  2003-11-07  3:34 [Caml-list] A grave bug in logical shift right op? Eray Ozkural
  2003-11-07  3:46 ` [Caml-list] " Jed Davis
@ 2003-11-07  3:53 ` Jacques Garrigue
  2003-11-07  6:22   ` Eray Ozkural
  2003-11-07  3:58 ` Andrew Lenharth
  2 siblings, 1 reply; 5+ messages in thread
From: Jacques Garrigue @ 2003-11-07  3:53 UTC (permalink / raw)
  To: erayo, exa; +Cc: caml-list

From: Eray Ozkural <exa@kablonet.com.tr>

> I'm using the debian package in testing....
> 
> orion:fealn-attack$ ledit ocaml
>         Objective Caml version 3.07+2
> 
> # Printf.printf "%X" 0xffffffff;;
> 7FFFFFFF- : unit = ()
> # Printf.printf "%lx" (Int32.of_int 0xffffffff);;
> ffffffff- : unit = ()
> # -1 lsr 24;;
> - : int = 127
> # Int32.shift_right_logical (Int32.of_int (-1)) 24;;
> - : int32 = 255l
> 
> What's going on here? Something's eating the most significant bit in
> both hexadecimal output routine and the logical shift right
> operator. Somebody please help me! My cipher isn't working!!!

Sure, the int type has only 31 bits. In good math,
(2 ^ 31 - 1) quo 2 ^ 24 is 127, as far as I know.

Note that the problem with your first example has already been
discussed. A litteral bigger than the biggest possible integer should
probably trigger an error/exception.
A bit more curions is your second example: since
0xffffffff = 0x7fffffff = -1, converting it to int32 gives -1l (the
32-bit value for -1), which happens to be 0xffffffffl.

If you want to do 32-bit computations, you must use only 32-bit
integers. This shouldn't be too inefficient as long as you use loops
rather than function calls (the same recommandations as for floats
apply, I believe).

Jacques Garrigue

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] A grave bug in logical shift right op?
  2003-11-07  3:34 [Caml-list] A grave bug in logical shift right op? Eray Ozkural
  2003-11-07  3:46 ` [Caml-list] " Jed Davis
  2003-11-07  3:53 ` [Caml-list] " Jacques Garrigue
@ 2003-11-07  3:58 ` Andrew Lenharth
  2 siblings, 0 replies; 5+ messages in thread
From: Andrew Lenharth @ 2003-11-07  3:58 UTC (permalink / raw)
  To: erayo; +Cc: Ocaml

Section 6.2.1 of the manual is useful:
Integer values are integer numbers from -2^30 to 2^30-1, that is -1073741824 to 1073741823. The implementation may support a wider range of integer values: on 64-bit platforms, the current implementation supports integers ranging from -2^62 to 2^62-1.

You are experiencing overflow.  One bit of integers are used for tagging purposes (if I recall correctly).  Int32 is a boxed type.

Andrew Lenharth

On Fri, Nov 07, 2003 at 05:34:59AM +0200, Eray Ozkural wrote:
> I'm using the debian package in testing....
> 
> orion:fealn-attack$ ledit ocaml
>         Objective Caml version 3.07+2
> 
> # Printf.printf "%X" 0xffffffff;;
> 7FFFFFFF- : unit = ()
> # Printf.printf "%lx" (Int32.of_int 0xffffffff);;
> ffffffff- : unit = ()
> # -1 lsr 24;;
> - : int = 127
> # Int32.shift_right_logical (Int32.of_int (-1)) 24;;
> - : int32 = 255l
> 
> What's going on here? Something's eating the most significant bit in
> both hexadecimal output routine and the logical shift right
> operator. Somebody please help me! My cipher isn't working!!!
> 
> Confused,
> 
> -- 
> Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
> Comp. Sci. Dept., Bilkent University, Ankara  KDE Project: http://www.kde.org
> www: http://www.cs.bilkent.edu.tr/~erayo  Malfunction: http://mp3.com/ariza
> GPG public key fingerprint: 360C 852F 88B0 A745 F31B  EA0F 7C07 AE16 874D 539C
> 
> -------------------
> To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
> Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners

-- 
"The reasonable man adapts himself to the world; the unreasonable 
one persists in trying to adapt the world to 
himself. Therefore all progress depends on the unreasonable man."
-- George Bernard Shaw

No matter how cynical you become, it's never enough to keep up.
-- Lily Tomlin

Fools ignore complexity; pragmatists suffer it; experts avoid it; 
geniuses remove it.
-- A. Perlis

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] A grave bug in logical shift right op?
  2003-11-07  3:53 ` [Caml-list] " Jacques Garrigue
@ 2003-11-07  6:22   ` Eray Ozkural
  0 siblings, 0 replies; 5+ messages in thread
From: Eray Ozkural @ 2003-11-07  6:22 UTC (permalink / raw)
  To: Jacques Garrigue; +Cc: caml-list

Excuse me for forgetting this fact about the ocaml int type.

Having been too accustomed to C/C++, I must have conditioned myself into 
thinking int couldn't possibly be 31 bits. I swear I had learnt it sometime 
in the past only to forget it :)

Thanks for the clarification.

On Friday 07 November 2003 05:53, Jacques Garrigue wrote:
> Sure, the int type has only 31 bits. In good math,
> (2 ^ 31 - 1) quo 2 ^ 24 is 127, as far as I know.
>
> Note that the problem with your first example has already been
> discussed. A litteral bigger than the biggest possible integer should
> probably trigger an error/exception.
> A bit more curions is your second example: since
> 0xffffffff = 0x7fffffff = -1, converting it to int32 gives -1l (the
> 32-bit value for -1), which happens to be 0xffffffffl.
>
> If you want to do 32-bit computations, you must use only 32-bit
> integers. This shouldn't be too inefficient as long as you use loops
> rather than function calls (the same recommandations as for floats
> apply, I believe).
>
> Jacques Garrigue

-- 
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara  KDE Project: http://www.kde.org
www: http://www.cs.bilkent.edu.tr/~erayo  Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B  EA0F 7C07 AE16 874D 539C

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-11-07  6:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-07  3:34 [Caml-list] A grave bug in logical shift right op? Eray Ozkural
2003-11-07  3:46 ` [Caml-list] " Jed Davis
2003-11-07  3:53 ` [Caml-list] " Jacques Garrigue
2003-11-07  6:22   ` Eray Ozkural
2003-11-07  3:58 ` Andrew Lenharth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).