Page 1 sur 1

[...] Retourner la valeur exacte d'un nombre

Posté : mer. 28 janv. 2015 22:52
par azerty2699
Bonjour,

J'aimerais obtenir la valeur exacte d'un résultat (forme fractionnaire par exemple) et non sa valeur décimale approchée, lors d'un calcul.

Par exemple, si je dis :

$result = (-8) / (11/2)
msgbox (0,"",$result)

J'obtiens une valeur approchée décimale avec plein de chiffres après la virgule...

Merci de votre aide.

Re: [...]retourner la valeur exacte d'un nombre

Posté : mer. 28 janv. 2015 23:05
par Tlem
C'est quoi plein de chiffres ?
10, 50, 500, 50000, 50000000000 ?

Si vous déterminez un nombre de décimales après la virgule (50 par exemple) le résultat de certaines divisions seront forcément approchées ...

Envoyé de mon appareil mobile avec Tapatalk.

Re: [...] Retourner la valeur exacte d'un nombre

Posté : mer. 28 janv. 2015 23:32
par azerty2699
J'ai bien dit plein de chiffres après la virgule... par exemple, 1,455852585452
Mais je n'aimerais pas une valeur approchée, mais la valeur exacte !

Re: [...] Retourner la valeur exacte d'un nombre

Posté : mer. 28 janv. 2015 23:42
par TommyDDR
Valeur exacte = une infinité de chiffre après la virgule, et je doute que vous possédiez une infinité de RAM pour stocker tout ça ;)

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 11:39
par CDBarbu
Si tu veux la valeur exact il faut toujours avoir le résultat sous le forme d'une fraction, si je me rappelle mes vieux cours de maths pour diviser un nombre "a" par un nombre "b" il suffit de multiplier le nombre "a" par l'inverse d'un nombre "b" donc dans ton exemple

-8 * (2/11)
MsgBox(0,"","-16/11")

Puis d'afficher ça dans une MsgBox par exemple mais bon ça n'est plus vraiment du calcul c'est simplement de la mise en forme de chaine de caractère... Après il est possible de simplifier la fraction si c'est ce que tu cherches mais je ne suis pas sur de comprendre.

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 16:32
par Y01
Bonjour,

CDBarbu est dans le vrai, soit on pose le résultat sous forme de fraction, soit on bloque à un certain nombre de chiffre après la virgule car après tout pour être précis et reprendre l'exemple de Wikipedia
Wikipedia a écrit :Exemple : exactement 12 revient à écrire 12,000000000000000000000000000000…

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 17:29
par azerty2699
TommyDDR, tu sais ce que c'est qu'une valeur exacte ?? je n'en ai pas l'impression... En effet une fraction ferait très bien l'affaire, mais en entrée il y a des nombres naturels.
J'aimerais que de lui même, le programme me donne des valeurs exactes, par exemple une fraction, car par défault il arrondit.

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 17:59
par jbnh

Code : Tout sélectionner

$n = 28
$d = 44

$f = $n / $d
$a = D2F($f)

If @error Then Exit
MsgBox(0, $f, $a[0] & @CRLF & $a[1]);


Func D2F( $dec )
    If IsInt($dec) Then
        SetError(1)
        Return ""
    EndIf
    Local $i = 1, $bNeg = ($dec < 0), $f[2]
    If $bNeg Then $dec *= -1
    Do
        $i += 1
        $f[0] = $dec * $i
    Until IsInt($f[0])
    If $bNeg Then $f[0] *= -1
    $f[1] = $i
    Return $f
EndFunc

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 18:35
par blacksoul305
Bonsoir,

je suis certain que TommyDDR sait ce qu'est une valeur exacte, c'est pourquoi sa réponse n'est pas fausse.

Soient a et b deux entiers naturels, b divise a si et seulement si il existe un entier q tel que a = bq
Si b ne divise pas a, alors plusieurs cas se posent :
  • La valeur obtenue contient un nombre fini de décimales auquel cas le résultat est exacte mais long
  • La valeur obtenue contient un nombre infini de décimales, souvent il existe un rang pour lequel on aperçoit un ou des chiffres se répéter interminablement. Exemple 1/3 = 0.33333333333 que l'on peut noter aussi 0.33, et aucun ordinateur ne pourrait stocker toutes les décimales de ce nombre puisque il y'en a une infinité.
Avoir des nombres naturels en entrée d'une division n'implique pas forcément un nombre aux décimales finies, par exemple 1/3 avec 1 et 3 qui sont entiers naturels.

Dans ces cas là, plusieurs options s'offrent à toi, tu peux te permettre d'arrondir les valeurs de ton calcul (je pense que l'ordinateur le fait de lui même de toutes façons) ou alors tu peux travailler ton système de sortie pour qu'il soit exacte.
Ainsi on pourra dire que 1/3 = 0.33 qui sont tous les deux le résultat exact de 0.3333333333...

Ma suggestion au final serait la suivante, que tu crées/trouves une fonction qui vérifie si un nombre donné rentre dans tes critères de sorties, dans ces cas là on l'affiche, sinon bien tu affiches une bonne vieille chaîne de caractères du style :

Code : Tout sélectionner

$nbr = "1/3"
Et un bon petit Execute au moment où tu as besoin du résultat :

Code : Tout sélectionner

Execute($nbr)

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 19:06
par TommyDDR
@azerty2699 : Tlem vous a demandé combien de chiffres après la virgule, vous avez répondu "plein" donc potentiellement une infinité, d'où ma réponse.
Je vous l'accorde, je n'ai pas vu "sous forme fractionnaire par exemple" et je m'en excuse.

Pouvez-vous expliquer le but de cette demande ?

Re: [...] Retourner la valeur exacte d'un nombre

Posté : jeu. 29 janv. 2015 21:50
par mikell
La réponse de jbnh correspond parfaitement à ce qui est demandé

Code : Tout sélectionner

$f = (-8) / (11/2)
$a = D2F($f)
MsgBox(0, $f, $a[0] & "/" & $a[1])

Re: [...] Retourner la valeur exacte d'un nombre

Posté : ven. 30 janv. 2015 13:55
par jchd
Wolfram Alpha ?

Re: [...] Retourner la valeur exacte d'un nombre

Posté : ven. 30 janv. 2015 17:05
par jbnh
mikell a écrit :La réponse de jbnh correspond parfaitement à ce qui est demandé

Code : Tout sélectionner

$f = (-8) / (11/2)
$a = D2F($f)
MsgBox(0, $f, $a[0] & "/" & $a[1])
Je précise que ce n'est pas ma création mais je l'avais trouvée sur le forum anglais