Bash - mnożenie i dzielenie

09 stycznia, 2008

No i okazuje się, że dzielenie i mnożenie nie są przemienne w wydaniu bashowym:
echo $[1/2*100]
echo $[100*1/2]

1. Malin napisał(a):
09 stycznia 2008, 07:55:37

echo $[1/2] daje 0.
Pewnie są przemienne, tylko liczby są zaokrąglane w dół.

2. Michał Górny napisał(a):
09 stycznia 2008, 08:19:11

Przy podobnym założeniu, w C też nie są! Tożto złamanie podstawowej matematyki i w ogóle apokalipsa q ;.

3. h4v napisał(a):
09 stycznia 2008, 09:22:10

Jesli dobrze pamietam w bashu mozna dzialac tylko na liczbach calkowitych.

4. guest123 napisał(a):
09 stycznia 2008, 09:42:54

Won do podstawówki! A nie głupoty na głównej joggera będziesz pokazywał ;P

5. ant napisał(a):
09 stycznia 2008, 10:13:12

Spróbuj tak:

echo 100*1/2 |bc

6. ant napisał(a):
09 stycznia 2008, 10:14:17

a raczej tak ;)
echo 1/2*100 |bc -l

7. Tomasz Wysocki napisał(a):
09 stycznia 2008, 10:37:44

Tak się składa, że na komputerze tak czy siak nie obowiązują tego typu prawa matematyczne. Bo albo działasz na liczbach zmiennoprzecinkowych, albo stałoprzecinkowych, albo całkowitych, albo wszystko jedno jakich jeszcze innych, to i tak tylko w określonym zakresie będą prawa przestrzegane (albo nie będą w ogóle). W szczególnych przypadkach takich jak np. python, jest możliwość stworzenia obiektu, który by wykonywał mnożenie i dzielenie poprawnie, aż do wyczerpania całej pamięci (nie zmienia to faktu, że jest to tylko pewien zakres).

8. mh napisał(a):
09 stycznia 2008, 10:51:41

NAZWA
bc - język kalkulatora <b>dowolnej precyzji</b>

9. Zal napisał(a):
09 stycznia 2008, 12:29:48

Przekopiowałem do konsoli, odpaliłem, spojrzałem na wynik - "poprawny!". Dopiero po jakimś czasie zorientowałem się, co autor miał na myśli ;D

Operacje na liczbach całkowitych vs oper. na na liczbach zmiennoprzecinkowych ;]

10. kosa napisał(a):
09 stycznia 2008, 14:12:53

U mnie tak jak się spodziewałem, czyli w sumie poprawnie:

kosa@kosa:~$ echo $[1/2*100]
0
kosa@kosa:~$ echo $[100*1/2]
50

Rozie, czegoś innego oczekiwałeś?

11. Michał Górny napisał(a):
09 stycznia 2008, 15:58:26

A tak w ramach dalszego przeglądu języków:
* Perl zawsze wylicza zmiennoprzecinkowo,
* Pythonowi trzeba podpowiedzieć, że ma liczyć zmiennoprzecinkowo (1./2 albo 1/2.).

12. rozie napisał(a):
12 stycznia 2008, 10:29:44

To raczej była 'note for myself' (chyba nawet pierwotnie było na lvl1, ale bot leżał). Się domyśliłem, że działania są wykonywane od lewej do prawej z zaokrąglaniem do liczby całkowitej po każdym działaniu. Natomiast intuicyjne to to nie jest. A oczekiwałem takiego samego wyniku w obu przypadkach. No dobrze, nawet nie oczekiwałem. Po prostu 'źle' policzyło.

13. piotrek napisał(a):
17 marca 2008, 19:59:33

lol