[bash] maximale Zahl?
[bash] maximale Zahl?
Ich speichere in einer Variable einen Zeitraum in Minuten.
Wieviele Minuten passen da rein? Was steckt da für ein Datentyp dahinter? Dazu konnte ich im Netz (Mangles sinnvoller keywords) nichts finden.
Könnte man ggf. den Datentyp so manipulieren (z.B. unsigned long statt signed long), dass mehr rauszuholen ist?
Also was ist der größtmögliche Zeitraum, den ich mit einer Minutenvariable darstellen könnte?
Wieviele Minuten passen da rein? Was steckt da für ein Datentyp dahinter? Dazu konnte ich im Netz (Mangles sinnvoller keywords) nichts finden.
Könnte man ggf. den Datentyp so manipulieren (z.B. unsigned long statt signed long), dass mehr rauszuholen ist?
Also was ist der größtmögliche Zeitraum, den ich mit einer Minutenvariable darstellen könnte?
Re: [bash] maximale Zahl?
Scheinbar wird der Wert nicht von bash sondern von "test" definiert. In dessen docs kann ich aber nix finden.
Gehen wir von einem 32bit System aus, so könnte der maximale Long Integer bei "2147483647" liegen. Sind das Minuten, entspräche das über 4189 Jahren. Soviel Zeit sollte zwischen zwei Backup-Läufen eh nicht vergehen.
Da es sich aber um das Zeitmanagement meines Backup-Environments handelt, möchte ich hier doch gerne absolut sicher gehen.
Gehen wir von einem 32bit System aus, so könnte der maximale Long Integer bei "2147483647" liegen. Sind das Minuten, entspräche das über 4189 Jahren. Soviel Zeit sollte zwischen zwei Backup-Läufen eh nicht vergehen.
Da es sich aber um das Zeitmanagement meines Backup-Environments handelt, möchte ich hier doch gerne absolut sicher gehen.
Re: [bash] maximale Zahl?
Code: Alles auswählen
~> echo $((2**63-1))
9223372036854775807
~> test 9223372036854775807 -ge 0 && echo geht noch
geht noch
~> test 9223372036854775808 -ge 0 && echo geht noch
bash: test: 9223372036854775808: integer expression expected
Re: [bash] maximale Zahl?
Auch sehr nett einfach immer zu verdoppeln und schauen ob sich was bei einem anderen Variablentyp ändert.
Code: Alles auswählen
#!/bin/bash
a=2;
while :;
do
echo $a;
a=$((2*a));
done
Re: [bash] maximale Zahl?
Sicher? Und ueberhaupt, was meinst du mit ``test''?MoonKid hat geschrieben:Scheinbar wird der Wert nicht von bash sondern von "test" definiert.
Use ed once in a while!
Re: [bash] maximale Zahl?
Experimente sind ja eine Sache, aber gibt es dazu keine Doku. Ist das nicht irgendwo sicher definiert? Vielleicht eine Konstante?
Re: [bash] maximale Zahl?
Natürlich gibt's dazu ne Doku: http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz
Wenn man da in die expr.c reinguckt, dann sieht man, dass die ihre Vaiablen als intmax_t definert haben. (Ich nehme an, dass die für expr die gleichen typen wie sonstwo nehmen.)
Der C99 Standard sagt dazu:
=> Das ding ist auf gewähnlichen PCs ein long long int (singht 64Bit). Und da das so im Source steht ist das wohl auch nicht zu ändern. (Esseiden du schreibst den Code neu.)
Wenn man da in die expr.c reinguckt, dann sieht man, dass die ihre Vaiablen als intmax_t definert haben. (Ich nehme an, dass die für expr die gleichen typen wie sonstwo nehmen.)
Der C99 Standard sagt dazu:
Quelle: http://www.qnx.com/developers/docs/6.4. ... l#intmax_tintmax_tThe type specifies the largest signed integer type. Note that the definition shown here is merely representative.Code: Alles auswählen
typedef long long intmax_t;
=> Das ding ist auf gewähnlichen PCs ein long long int (singht 64Bit). Und da das so im Source steht ist das wohl auch nicht zu ändern. (Esseiden du schreibst den Code neu.)
rot: Moderator wanne spricht, default: User wanne spricht.
Re: [bash] maximale Zahl?
Sehr schoen.wanne hat geschrieben:Natürlich gibt's dazu ne Doku: http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz
Vielen Dank fuer die Erlaeuterungen.
Use ed once in a while!