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

2 questions a propos d'un bug #2454

Closed
vicuna opened this issue May 15, 2000 · 3 comments
Closed

2 questions a propos d'un bug #2454

vicuna opened this issue May 15, 2000 · 3 comments

Comments

@vicuna
Copy link

vicuna commented May 15, 2000

Original bug ID: 113
Reporter: administrator
Status: closed (set by @xavierleroy on 2006-06-17T09:23:51Z)
Resolution: won't fix
Priority: normal
Severity: feature
Category: ~DO NOT USE (was: OCaml general)

Bug description

Bonjour

Il y a qqs mois, je vous ai ecrit `a cause d'un bug dans la librairie
num en camllight.
J'avais reussi a isoler le bug sur un fichier de 20 ou 30 lignes et je
n'avais pas eu le courage
d'aller + loin. Je l'ai eu aujourd'hui, et le bug (mais est-ce un
bug ?) vient de ce que j'avais ecrit :

if (x0 < (Int 0) & x1 > (Int 0))

au lieu d'utiliser </ et >/ Quand on utilise ces derniers, ca evite
le bug. Ca laisse
penser que le compilateur utilisait la fonction < des ints a la place de
celle des nums.
Pourtant le compilateur accepte l'expression avec < et > et la type
bien, si j'en crois:
#let test x = x </ (Int 0) ;;
test : num -> bool =

1ere question :
Est il correct ou non de programmer en camllight : x0 < (Int 0)
et est ce que le sens donn'e est bien "le bon" !?

  • en camllight ?
  • en ocaml ?

2 eme question :
A la suite du bug, j'avais transite sur ocaml 2. Par contre il y a le
bug du
float_of_num( Int 1// Int 16) -> 0.625 au lieu de 0.0625 . Ce bug existe
t il en ocaml 3 ?
float_of_num est qd meme bien utile ;)

Bien cordialement,

--
Dominique Michelucci Dominique.Michelucci@emse.fr http://www.emse.fr/~micheluc
Ecole Nationale Superieure des Mines de St-Etienne
158 cours Fauriel, 42023 Saint Etienne cedex 2, France
Tel: +33 4 77 42 01 73 from abroad, 04 77 42 01 73 from France
Fax: +33 4 77 42 66 66 from abroad, 04 77 42 66 66 from France

@vicuna
Copy link
Author

vicuna commented May 16, 2000

Comment author: administrator

Il y a qqs mois, je vous ai ecrit `a cause d'un bug dans la
librairie num en camllight. J'avais reussi a isoler le bug sur un
fichier de 20 ou 30 lignes et je n'avais pas eu le courage d'aller +
loin. Je l'ai eu aujourd'hui, et le bug (mais est-ce un bug ?)
vient de ce que j'avais ecrit :

if (x0 < (Int 0) & x1 > (Int 0))

au lieu d'utiliser </ et >/ Quand on utilise ces derniers, ca evite
le bug. Ca laisse penser que le compilateur utilisait la fonction <
des ints a la place de celle des nums. Pourtant le compilateur
accepte l'expression avec < et > et la type bien, si j'en crois:
#let test x = x </ (Int 0) ;;
test : num -> bool =

C'est un problème subtil. Les fonctions de comparaison de Caml
(=, <, >, <=, >=) sont en effet polymorphes et s'appliquent à des
données de n'importe quel type. Cependant, elles effectuent une
comparaison structurelle des données, et cette comparaison, dans le
cas du type "num" en particulier, n'est pas toujours celle que l'on
veut!

Exemple simple: 1/2 et 2/4 sont égaux pour la fonction =/ des nums,
mais ont (sauf normalisation préalable) des représentations différentes,
de la forme Ratio(<1>, <2>) vs. Ratio(<2>, <4>), qui ne sont pas
égales structurellement.

1ere question :
Est il correct ou non de programmer en camllight : x0 < (Int 0)
et est ce que le sens donn'e est bien "le bon" !?

  • en camllight ?
  • en ocaml ?

La réponse est "non", ni en Caml Light, ni en OCaml. Il faut toujours
utiliser les comparaisons </, etc, lorsqu'on travaille sur les nums.

Nous sommes conscients de la gêne que cela occasionne aux programmeurs,
mais le problème est difficile à résoudre, du moins sans changer
radicalement l'implémentation de la bibliothèque Nums.

2 eme question :
A la suite du bug, j'avais transite sur ocaml 2. Par contre il y a le
bug du
float_of_num( Int 1// Int 16) -> 0.625 au lieu de 0.0625 . Ce bug existe
t il en ocaml 3 ?

Il a été corrigé en 3.00.

Cordialement,

  • Xavier Leroy

@vicuna
Copy link
Author

vicuna commented May 16, 2000

Comment author: administrator

Issues with nums comparisons vs. generic comparisons.

@vicuna
Copy link
Author

vicuna commented Jun 17, 2006

Comment author: @xavierleroy

The issue with comparisons is impossible to address within the architecture of the Num library.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant