[ algo ] - convertir un reel en fraction.... 0.5 --> 1/2

- convertir un reel en fraction.... 0.5 --> 1/2 [ algo ] - Programmation

Marsh Posté le 01-03-2002 à 03:08:52    

comment qu'on fait ???

Reply

Marsh Posté le 01-03-2002 à 03:08:52   

Reply

Marsh Posté le 01-03-2002 à 03:18:05    

accessoirement.y'a pas une fonction prédéfinie de VB qui le fait ???

Reply

Marsh Posté le 01-03-2002 à 03:46:26    

[:xx_xx]

Reply

Marsh Posté le 01-03-2002 à 03:49:40    

[:rofl]

Reply

Marsh Posté le 01-03-2002 à 04:05:19    

[:tomawack]  
 
 
 [:vancrayenest]

Reply

Marsh Posté le 01-03-2002 à 04:06:45    

[:xx_xx]

Reply

Marsh Posté le 01-03-2002 à 04:19:58    

:lol:  
 :eek2:  :hello:

Reply

Marsh Posté le 01-03-2002 à 10:57:30    

allez aideeeez moué...

Reply

Marsh Posté le 01-03-2002 à 11:04:16    

Que va t'apporter cette nouvelle notation ??? ( en gros en a tu vraiment besoin)


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 01-03-2002 à 11:15:04    

beh au lieu d'afficher, pour mon polynome de newton interpolé, 1.66E-3x^2 je voudrais afficher (5/3)x^2
(C un exemple, pas fait gaffe aux valeurs)

Reply

Marsh Posté le 01-03-2002 à 11:15:04   

Reply

Marsh Posté le 01-03-2002 à 11:22:20    

bon en fait j'ai un debut de méthode qui tourne mais ce con de VB m'emmerde
 
en fait il a du mal a manipuler les grands grands entiers...style j'ai deux variant (ds le style 1.66E16) et jepeux les diviser (/), mais la division entiere et le modulo me font des stacks overflow  [:tomawack]

Reply

Marsh Posté le 01-03-2002 à 11:37:06    

J'imagine que ce qui te fait planter c'est que tu effectues une decomposition en nombres premier du total :
1.66E16/3.54E8=decomp(1.66E16)+"/"+decomp(3.54E8)
 
Si c'est ca, avant de decomposer le nombre tu separe mantisse et exposant et tu effectue la decomposition sur chacun :
decomp(166)+"/"+decomp(354)+decomp(1E16/1E8)
 
Si c'est ce que tu fais deja et qu'il ne veut pas traiter les grands exposants: tu fais un switch sur l'exposant auxquel tu adjoint des valeurs precalculees que t'auras stockes dans un tableau de reference:
 
if(exposant=8) then affiche "2^8*5^8"
 
J'espere que ca pourras t'aider

Reply

Marsh Posté le 01-03-2002 à 11:40:01    

euh en fait je vois pas trop
disons qu'a ma fonction on peut lui passer 0.5 comme on peut lui passer 1.66666666666666666667
dans le premier cas ca tourne niquel........dans le deuxième ca explose parce que les fonction prédéfinies de VB de divisions entières ne sont pas prévues pour de graaaaaaaaands entiers...
 
et je comprend pas du tout ton explication :D

Reply

Marsh Posté le 01-03-2002 à 11:55:20    

Tu appliques quoi comme algo pour transformer ton decimal en fraction ??
C'est un truc idoine de VB et si oui y fait quoi ??

Reply

Marsh Posté le 01-03-2002 à 12:56:22    

Mon premier programme sur calculette! :lol:
L'algo utilisé par ma calcu (je l'avais retrouvé :D) est simpliste :
 
genre : 0.5
il multiplie par 10 puis il simplifie vite fait :
0.5 * 10 => 5/10 simplifié en 1/2
pour simplifier, il cherche juste si c'est divisible par 2, 3 et 5 je crois
 
bref des exemples pour mieux comprendre:
 
0.25 => 25/100    simplifie par 5   => 5/20    => par 5    =>1/4
 
c'est rapide mais ca chie assez facilement :
 
0.333333   => 333333/1000000 ... pas de simplification, on garde ca ! :(
 
alors j'avais codé un algo "brute force"
excuse pour mon VB, c'est tres loin ...

Code :
  1. Dim a As Integer;
  2. Dim b As Integer;
  3. Dim egal As boolean;
  4. Dim nombre As Double;   'le nombre a trouver
  5. a = 1;
  6. b = 1;
  7. egal = false;
  8. Loop
  9.     if(a/b = nombre) then
  10.         Exit Do
  11.     else
  12.         if (a/b > nombre then
  13.             b = b+1;
  14.         else
  15.             a = a + 1;
  16.     end if
  17. Do


vala !
sur calculette ca ramait, mais sur PC ca doit etre gourmand mais ca va assez vite ... mais peut etre que sur du grand nombre, executé beaucoup de fois et en VB, ca va etre lent ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-03-2002 à 13:10:26    

beh le probleme C que j'ai des depassement de capacités vu que je manipule des E16
ca tourne très bien avec des 1/2 1/4 et tt et tt
mais des que j'ai des  1.3333333333 ou des conneries ds le style ca patauge

Reply

Marsh Posté le 01-03-2002 à 13:19:56    

rhaaaaaaaaa j'suis blasé...en fait le seul pbleme C que mon pgcd etait définit en long et non en variant comme ts les autres...
bon ca tourne :D

Reply

Marsh Posté le 01-03-2002 à 13:29:05    

zul a écrit a écrit :

rhaaaaaaaaa j'suis blasé...en fait le seul pbleme C que mon pgcd etait définit en long et non en variant comme ts les autres...
bon ca tourne :D  




 
pas bo le Variant  :gun:

Reply

Marsh Posté le 01-03-2002 à 19:06:29    

titoine42 a écrit a écrit :

 
 
pas bo le Variant  :gun:  




 
nan pas beau mais C le long est pas assez long...

Reply

Marsh Posté le 02-03-2002 à 00:19:21    

Moi j'aurais pas cherché loin, j'aurais défini des objets fractions ainsi que les opérations nécessaires dessus.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 02-03-2002 à 00:25:29    

Krueger a écrit a écrit :

Moi j'aurais pas cherché loin, j'aurais défini des objets fractions ainsi que les opérations nécessaires dessus.  




Je vois pas le rapport.

Reply

Marsh Posté le 02-03-2002 à 00:33:21    

Oups, désolé j'avais pas bien lu le sujet. :sarcastic:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 02-03-2002 à 00:45:39    

ceci dit ca merde toujours puisque la fonction Mod de VB ne prend que des doubles (mes entiers sont + grands que ca)
la division entiere idem
donc C caca
VB  :gun:  
 
pour info je fais :  
 
xp : pour valeur = 1.268
je recupere partie entiere : 1
je recupere partie reelle 1.268-1  -->  0.268
je recupere la longueur partie reelle : len(reelle)-2  -->3
je fais valeur*10^3/10^3  ---> 1268/1000
j'applique l'algo d'euclide pour le pgcd  
je divise numérateur et denominateurs par le pgcd
 
donc en fait ca tourne niquel pour des 0.5  0.225 etc...
par contre pour des 1.6666666666666666667 (style 5/3   ca arrondit a la fin)  ca chie lamentablement...paske VB il a du mal a traiter un   1E16  :sweat:

Reply

Marsh Posté le 02-03-2002 à 02:44:00    

slt, je passai juste par ce forum ...
pour les valeurs du genre 1.33333333333333, le truc, c didentifier :
(bon, c juste un algo, suis pas une bete en prog)
 
a = 1.333333333333
10*a = 13.33333333333
10*a = 12 + a
a = 12/9
on simplifi -> a = 4/3
 
voila :) :hello:
 
EDIT :
joubliai : pour savoir sil fo multiplier par 10, 100 ou plus, il fo reperer la taille de la sequence ki se repete, par exemple sur 4.321553215532155 il fo faire :
 
a = 4.321553215532155
100000*a = 432155.3215532155 car la sequence fait 5 chiffres
100000*a = 432151 + a
a = 432151/99999
on simplifi -> a = 432151/99999 (merci maple)  :lol: putain g reussi a trouver un nb premier =)
...etc ...

 

[jfdsdjhfuetppo]--Message édité par The_chosen_one--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 02-03-2002 à 12:59:17    

:jap:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 02-03-2002 à 18:26:50    

g tue le tmoic avec mon idee ou koi ?
elle est pas bonne ?

Reply

Marsh Posté le 02-03-2002 à 19:16:20    

Ben si, mais ils sont peut-être partis en week-end. :D


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 02-03-2002 à 22:31:51    

The_chosen_one a écrit a écrit :

g tue le tmoic avec mon idee ou koi ?
elle est pas bonne ?  




 
nan j etais effectivement parti en wikend :)
merci beaucoup j V appliquer ca dès demain :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed