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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

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

#1

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

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

#3

Message 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 !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : En ligne

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

#4

Message 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 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
CDBarbu
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 28 janv. 2015 22:18
Status : Hors ligne

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

#5

Message 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.
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

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

#6

Message 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…
Y01
azerty2699
Niveau 3
Niveau 3
Messages : 47
Enregistré le : mer. 07 janv. 2015 18:58
Status : Hors ligne

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

#7

Message 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.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#8

Message 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
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

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

#9

Message 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)
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : En ligne

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

#10

Message 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 ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#11

Message 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])
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2273
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#12

Message par jchd »

Wolfram Alpha ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#13

Message 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
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Répondre