|
Pages: [1]
|
 |
|
Author
|
Topic: Math or number overflow (Read 1163 times)
|
RebolBert
Guest
|
Suite à des messages échangés dans ce topicPour ce qui est des maths, quels genre de calculs fais tu ? Les integer! sont en 32 bits, mais les decimal! sont larges et permettent de grand calculs . Lorsque j'essaie un nouveau langage, j'aime bien faire des petits test comme ce qui suit. Pour le moment parmi les langages essayés (python, scheme, newlisp, divers logos, gui4cli, autoit par exemple), seul REBOL provoque le type d'erreur cité. Ai-je fait une erreur quelque part ? Sinon quelle en est la raison ? >> ;;; opération sur les entiers (integer!) >> a: b: 1 == 1 >> repeat c 48 [ [ print [c ":" b] [ set [a b] reduce [b a + b] [ ] 1 : 1 2 : 2 3 : 3 4 : 5 5 : 8 (...) ; suite de l'énumération 43 : 701408733 44 : 1134903170 45 : 1836311903 ** Math Error: Math or number overflow ** Near: a + b >>
>> ;;; opération sur les longs nombres >> set [a b] [3 2] == [3 2] >> repeat c 15 [ [ print [c ":" b] [ set [a b] reduce [b a * b] [ ] 1 : 2 2 : 6 3 : 12 4 : 72 5 : 864 6 : 62208 7 : 53747712 ** Math Error: Math or number overflow ** Near: a * b >> >> ;;; opération sur les réels (decimal!) >> set [a b] [1.0 2.0] == [1.0 2.0] >> repeat c 18 [ [ print [c ":" b] [ set [a b] reduce [b a * b] [ ] 1 : 2.0 2 : 2.0 3 : 4.0 4 : 8.0 5 : 32.0 6 : 256.0 7 : 8192.0 8 : 2097152.0 9 : 17179869184.0 10 : 3.6028797018964E+16 11 : 6.1897001964269E+26 12 : 2.23007451985306E+43 13 : 1.38034926935811E+70 14 : 3.07828173409332E+113 15 : 4.24910394253414E+183 16 : 1.30799390525667E+297 ** Math Error: Math or number overflow ** Near: a * b >> Pour le dernier test quelques interpréteurs renvoient la valeur #INF ou quelquechose d'approchant mais aucun d'eux ne retourne une erreur.
|
|
|
|
« Last Edit: August 30, 2006, 05:28:41 AM by Bert »
|
Logged
|
|
|
|
|
|
|
Philippe
|
Bert,
La mailing list de RT comprend plein de réponses. Celle que fournit Volker dans le lien que je t'ai indiqué est explicite.
Si tu as une question, je te suggère d'abord d'étudier la ML pour voir s'il n'y a pas une réponse dessus. De fil en aiguille, tu y trouveras des perles. Le chapitre 11 de la doc (us ou fr) te donne d'autres infos.
N'hésites pas à mettre tes questions en anglais ou les deux, parfois certains developpeurs anglophones peuvent répondre au vu du code, mais comme ils ne sont pas sûrs du sens des mots, ils ne le font pas.
à +
|
|
|
|
|
Logged
|
===Philippe
|
|
|
|
bouba
|
Ce n'est pas propre a Rebol, donc ne t'inquiete pas. on a le meme avec Ada et le code suivant : with Text_Io;ess RETURN)
procedure Toto is A : Positive := 1; B : Positive := 1; Tmp : Positive; begin for Counter in 1 .. 48 loop Text_Io.Put_Line("Counter =" & Integer'image(Counter) & " A =" & Integer'image(A) & " B =" & Integer'image(B)); Tmp := A; A := B; B := Tmp + B; end loop; end Toto;
Car le type Positive est sur 32 bits sur ma plate-forme. Alors que par exemple ruby n'explosera pas sur le calcul equivalent : a = b = 1 48.times do |c| puts "c=" + c.to_s + " a=" + a.to_s + " b=" + b.to_s a , b = b , a+b end
Car une conversion est faite automatiquement du type "integer" (Fixnum) en Bignum (pour Big Number) qui permet de manipuler des entiers d'une taille enorme. En clair, en fonction de la "politique" adoptee par le language que tu utilises, les resultats seront differents, le tout c'est de se renseigner avant de faire des calculs qui fachent. 
|
|
|
|
|
Logged
|
|
|
|
RebolBert
Guest
|
Veuillez m'excuser pour le titre de mon sujet en anglais ! Il correspondait au messages d'erreur que Rebol me retournait à chaque fois. Mais je ne me suis pas trompé de section dans ce forum. Le message était intentionnellement en français car j'éprouve beaucoup de difficultés à exprimer mes problèmes ou question en anglais (bien que j'arrive à comprendre à peu prés les messages que je lis). Je pense que si ma question avait été posée en anglais elle aurait été sans doute encore plus énigmatique pour un anglophone  Une des choses, parmi d'autres, que j'apprécie avec Rebol, c'est précisément qu'on a beaucoup de docs en français et qu'on puisse poser des question dans le même langue pour recevoir des réponses claires et de trés bonne qualité. Ce n'est pas le cas avec d'autres langages, comme newLisp par exemple, pourtant simple et efficace mais dont je n'arrive pas à comprendre toutes les subtilités parce que je n'arrive pas à poser les question qu'il faut. Je ne suis ni anglophone, ni informaticien, juste un curieux qui ne veut pas mourir idiot. J'entrevois encore à peine le génie qui fait de Rebol un langage d'avenir qui sait tirer partie de l'héritage des langages anciens, notamment Lisp tout en exploitant les découvertes actuelles sur le sujet ainsi que l'évolution technique en matière d'informatique. Merci pour la dernière réponse de Bouba, ça me fait avancer ... lentement et peut-être sûrement. La mailing list de RT comprend plein de réponses. Celle que fournit Volker dans le lien que je t'ai indiqué est explicite. Philippe, de quel lien s'agit-il ? J'ai dû rater quelque chose, je suis désolé. 
|
|
|
|
|
Logged
|
|
|
|
|
|
|
|
Pages: [1]
|
|
|
 |
News: 01-09-08 Alpha version of REBOL 3 has been released!
2187 Posts in 576 Topics by 1615 Members
Latest Member: Uncellhoolf
|