#1 Le 14/09/2008, à 22:01
- cedlerick
opération sur un nombre à virgule [RESOLU]
bonjour, je souhaiterais savoir comment effectuer des opérations sur des nombres à virgule
les classiques additions multiplication ou divisions
mais aussi des comparaisons inferieur
j'utilise la fonction expr en bourne-shell
par exemple comment faire 4.58 + 7.5
puis dire si 5.6 < 2 est vrai ou non
en pouvant bien sur remplacer les nombres par des variables...
merci d'avance...
Dernière modification par cedlerick (Le 16/09/2008, à 18:48)
portable ASUS G51J-SZ045V ubuntu/win7
Hors ligne
#2 Le 14/09/2008, à 22:08
- nicolas66
Re : opération sur un nombre à virgule [RESOLU]
La commande `expr' ne manipule que des entiers. Utilise `bc' à la place :
echo "scale=2;3/5" | bc -l
# retourne 0.60
echo "scale=2;3<5" | bc -l
# retourne 1
a=3; b=5; echo "scale=2;$a+$b" | bc -l
# retourne 8
Voilou
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#3 Le 14/09/2008, à 22:21
- cedlerick
Re : opération sur un nombre à virgule [RESOLU]
ok je comprends le truc
donc si on veux faire un test pour savoir si a < b pour faire la suite d'un "if", il faut faire un truc du genre:
a=0.5
r=`echo "scale=2;$a>1" | bc -l`
[ $r -eq 0 ] && echo ok
pas mieux???
portable ASUS G51J-SZ045V ubuntu/win7
Hors ligne
#4 Le 15/09/2008, à 00:54
- nicolas66
Re : opération sur un nombre à virgule [RESOLU]
Bah ca me paraît être bien
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#5 Le 15/09/2008, à 06:35
- harman
Re : opération sur un nombre à virgule [RESOLU]
salut
Par contre je ne vois pas l'intérêt de mettre scale=2; si c'est pour faire un test. À mon avis ça ne sert à rien dans ce cas.
Je n'utiliserais pas non plus l'option -l
#6 Le 15/09/2008, à 06:49
- HP
Re : opération sur un nombre à virgule [RESOLU]
un truc que comprends pas, c'est pourquoi :
> bc <<< "3/5"
0
et
> bc <<< "5*3.5"
17.5
le premier cas, je ne comprends pas… mais peut-être est-ce dû à l'heure …
EDIT:
avec scale, ça marche mieux :
> bc <<< "scale=2;3/5"
.60
ou avec -l :
> bc -l <<< "3/5"
.60000000000000000000
Dernière modification par HP (Le 15/09/2008, à 06:53)
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#7 Le 15/09/2008, à 17:41
- nicolas66
Re : opération sur un nombre à virgule [RESOLU]
Par contre je ne vois pas l'intérêt de mettre scale=2; si c'est pour faire un test. À mon avis ça ne sert à rien dans ce cas.
Je n'utiliserais pas non plus l'option -l
Par défaut, les calculs se font en entier. Donc si tu veux faire des calculs en flottant, faut fixer le paramètre `scale'. L'option `-l' indique que l'on souhaite utiliser la bibliothèque mathématique
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#8 Le 15/09/2008, à 17:55
- harman
Re : opération sur un nombre à virgule [RESOLU]
Par défaut, les calculs se font en entier. Donc si tu veux faire des calculs en flottant, faut fixer le paramètre `scale'. L'option `-l' indique que l'on souhaite utiliser la bibliothèque mathématique
Je parlais des tests du style "inférieur à" "égal à" (comme ton second exemple). Je ne vois pas en quoi "scale" et "-l" sont utiles, j'ai pourtant fait des tests.
Ceci fonctionne très bien par exemple
echo "7.183>7.182" | bc
Si tu as un contre exemple, je veux bien le voir.
#9 Le 15/09/2008, à 20:01
- cedlerick
Re : opération sur un nombre à virgule [RESOLU]
rebonjour tout le monde, bonnes remarques tout ça mais il doit aussi exister des solutions sur ce sujet en perl, non?
histoire de voir commenksé et pour condenser un peu des infos sur le sujet...
portable ASUS G51J-SZ045V ubuntu/win7
Hors ligne
#10 Le 15/09/2008, à 20:18
- HP
Re : opération sur un nombre à virgule [RESOLU]
ril doit aussi exister des solutions sur ce sujet en perl, non?
Ouais, et en Python aussi…
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#11 Le 15/09/2008, à 20:23
- nicolas66
Re : opération sur un nombre à virgule [RESOLU]
On peut même le faire en C et en Java, c'est dingue non ? On arrête pas le progrès !
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#12 Le 15/09/2008, à 20:31
- cedlerick
Re : opération sur un nombre à virgule [RESOLU]
"je ne crois que ce que je vois", vous la connaissez???
portable ASUS G51J-SZ045V ubuntu/win7
Hors ligne
#13 Le 16/09/2008, à 14:56
- nicolas66
Re : opération sur un nombre à virgule [RESOLU]
Un ptit résolu non ?
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#14 Le 16/09/2008, à 15:53
- harman
Re : opération sur un nombre à virgule [RESOLU]
il doit aussi exister des solutions sur ce sujet en perl, non?
En fait les "vrais" langages de programmation gèrent les nombres à virgule, donc il n'y pas de solution à chercher puisqu'il n'y a pas de problème
#!/usr/bin/perl
print (4.58 + 7.5) if (5.2 < 5.3)
fonctionne sans problème
#15 Le 16/09/2008, à 18:47
- cedlerick
Re : opération sur un nombre à virgule [RESOLU]
d'accord harman, dans ce cas... tout est dit
merci @ tous pour votre participation
portable ASUS G51J-SZ045V ubuntu/win7
Hors ligne