Rebol Talk Forum  |  Rebol International  |  Rebol France  |  Topic: Math or number overflow
Pages: [1] Print
Author Topic: Math or number overflow  (Read 1050 times)
RebolBert
Guest


Email
Math or number overflow
« on: August 30, 2006, 05:18:13 AM »

Suite à des messages échangés dans ce topic

Quote
Pour 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 ?

Code:
>> ;;; 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
>>

Code:
>> ;;; 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
>>

Code:
>> ;;; 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
Newbie
*
Offline Offline

Posts: 34


View Profile WWW
Re: Math or number overflow
« Reply #1 on: August 31, 2006, 03:12:39 AM »

Hello Bert

Tout d'abord, si tu fais une demande ailleurs que sur la section française, fais là en anglais.
First, elsewhere than the french section, write in english.

All information are on :
http://www.rebol.org/cgi-bin/cgiwrap/rebol/ml-display-thread.r?m=rmlQPVJ

See the Rebol  mailing list. Usually, you should find an answer to a huge range of questions.
Logged

===Philippe
Philippe
Newbie
*
Offline Offline

Posts: 34


View Profile WWW
Re: Math or number overflow
« Reply #2 on: August 31, 2006, 03:18:49 AM »

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
Newbie
*
Offline Offline

Posts: 10


View Profile
Re: Math or number overflow
« Reply #3 on: August 31, 2006, 07:59:50 AM »

Ce n'est pas propre a Rebol, donc ne t'inquiete pas.
on a le meme avec Ada et le code suivant :

Code:
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 :

Code:
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. Wink



Logged
RebolBert
Guest


Email
Re: Math or number overflow
« Reply #4 on: August 31, 2006, 12:12:30 PM »

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  Cheesy

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.

Quote
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é. Cry
Logged
bouba
Newbie
*
Offline Offline

Posts: 10


View Profile
Re: Math or number overflow
« Reply #5 on: September 01, 2006, 03:41:03 AM »

Philippe, de quel lien s'agit-il ? J'ai dû rater quelque chose, je suis désolé. Cry
Celui-la :
http://www.rebol.org/cgi-bin/cgiwrap/rebol/ml-display-thread.r?m=rmlQPVJ

A+ Wink
Logged
Pages: [1] Print 
Rebol Talk Forum  |  Rebol International  |  Rebol France  |  Topic: Math or number overflow
Jump to:  

  
Quick Search...

Advanced search
  
Welcome, Guest. Please login or register.
Did you miss your activation email?
May 18, 2008, 03:54:09 AM
Username: Password: Session Length:
  

News: 01-09-08

Alpha version of REBOL 3 has been released!


  
2167 Posts in 560 Topics by 1219 Members
Latest Member: JetsGuttjeors

  Rebol Talk Forum | Powered by SMF 1.0.9.
© 2001-2005, Lewis Media. All Rights Reserved.

RT design by Defiant Pc