Rechnen mit der Bash

05/09/2014 - 07:44 von Bernd | Report spam
Hi,

ich möchte eine zugegeben sehr lange Zahl in einem Bash-Skript
multiplizieren. Jedoch ist das Ergebnis nicht wie erwartet.


# echo $((9223372036854775807*90))
# -90

Bash-Version: 3.2.51
(Es geht aber auch nicht mit Version: 4.2.42)

Nun ist es sicher nicht üblich mit solchen großen Zahlen zu
arbeiten, aber hier ist es nötig.

Mich würde interessieren, warum das Ergebnis der Multiplikation falsch
ist und wie ich statt dessen an das Ergebnis komme.

Ich bin für Erklàrungen und Vorschlàge dankbar.

Bernd
 

Lesen sie die antworten

#1 Holger Petersen
05/09/2014 - 09:00 | Warnen spam
Bernd writes:

Hi,

ich möchte eine zugegeben sehr lange Zahl in einem Bash-Skript
multiplizieren. Jedoch ist das Ergebnis nicht wie erwartet.


# echo $((9223372036854775807*90))
# -90

und wie ich statt dessen an das Ergebnis komme.



Ein

echo "9223372036854775807*90" | bc

liefert

830103483316929822630

Die Zahl "9223372036854775807" ist "2^63 - 1"; irgendeine Multiplikation mit
einem Wert, der groesser als 4 ist wird den Bereich einer 64-bit Arithmetik
ueberschreiten. Zahlen ueber Deiner o.a. sind in so einer Darstellung negativ:

echo $((9223372036854775807+2)) -9223372036854775807
echo $((9223372036854775807+1)) -9223372036854775808
echo $((9223372036854775807+0)) 9223372036854775807

Aber "bc" kann das...

Gruss, Holger

Ähnliche fragen