Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re: [Caml-list] NaN-safe min and max #8323

Closed
vicuna opened this issue Oct 16, 2003 · 1 comment
Closed

Re: [Caml-list] NaN-safe min and max #8323

vicuna opened this issue Oct 16, 2003 · 1 comment
Labels

Comments

@vicuna
Copy link

vicuna commented Oct 16, 2003

Original bug ID: 1878
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

From: Remi Vanicat vanicat@labri.u-bordeaux.fr

this one is unsafe : the fact that a is a block with a tag
Obj.double_tag doesn't proof that the same is true for b even if a and
b have the same type :

let i1 = Lazy.lazy_from_val 0.0;;

val i1 : float Lazy.t = lazy 0.

let o1 = Obj.repr i1;;

val o1 : Obj.t =

Obj.is_block o1;;

  • : bool = true

Obj.tag o1 = Obj.double_tag;;

  • : bool = true

let i2 = lazy 3;;

val i2 : int lazy_t =

let o2 = Obj.repr i2;;

val o2 : Obj.t =

Obj.is_block o2;;

  • : bool = true

Obj.tag o2 = Obj.double_tag;;

  • : bool = false

both i1 and i2 have the same type, but only the first one is a block of
tag Obj.double_tag. A verification have to be done for both argument.

Very interesting: you have found an unsoundness in the ocaml compiler.
Using your example combined with arrays we obtain:

let arr = [|Lazy.lazy_from_val 0.0; lazy 1.0|];;

val arr : float Lazy.t array = [|lazy 0.; lazy 4.32681603021051e-311|]

i.e., the second lazy is assumed to be a float value, and results in a
wrong result (clearly 1.0 is not anything close to 4.32e-311)

So my take on this is that the code suggested for min is correct, this
is the compiler which is wrong: two values with the same type must
have the same representation.

A new headache for implementers...

Jacques Garrigue

@vicuna
Copy link
Author

vicuna commented Oct 16, 2003

Comment author: administrator

fixed DD 2003-10-17

@vicuna vicuna closed this as completed Oct 16, 2003
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant