Thread Byte zählen - zu große Zahlen? (9 answers)
Opened by bianca at 2011-05-12 14:03

Taulmarill
 2011-05-12 16:00
#148522 #148522
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Also 2 hoch 32 sollte schon mal völlig unproblematisch sein. Da hört dann der normale Int auf und perl fängt an mit doubles weiter zu rechnen (Fließkommazahlen doppelter Genauigkeit). Wie groß die Mantisse (also der Ganzzahlanteil) einer Fließkommazahl ist, hängt leider von der benutzten Plattform bzw. dem C-Compiler ab.

edit: ich hab mal ein bisschen rumgetestet und auf meinem Webserver scheint perl bis 2** 53 ganz gut zu zählen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use warnings;
use strict;

use Math::BigInt;

my $mbi = Math::BigInt->new( 2 ) ** Math::BigInt->new( 53 );
my $n   = 2 ** 53;

for my $o ( -10 .. 10 ) {
    printf "%.0f - ", $n + $o;
    print $mbi + $o;
    print "\n";
}

erzeugt folgende Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
9007199254740982 - 9007199254740982
9007199254740983 - 9007199254740983
9007199254740984 - 9007199254740984
9007199254740985 - 9007199254740985
9007199254740986 - 9007199254740986
9007199254740987 - 9007199254740987
9007199254740988 - 9007199254740988
9007199254740989 - 9007199254740989
9007199254740990 - 9007199254740990
9007199254740991 - 9007199254740991
9007199254740992 - 9007199254740992
9007199254740992 - 9007199254740993
9007199254740994 - 9007199254740994
9007199254740996 - 9007199254740995
9007199254740996 - 9007199254740996
9007199254740996 - 9007199254740997
9007199254740998 - 9007199254740998
9007199254741000 - 9007199254740999
9007199254741000 - 9007199254741000
9007199254741000 - 9007199254741001
9007199254741002 - 9007199254741002


Wenn du ganz sicher gehen willst, solltest du aber wohl einfach direkt Math::BigInt benutzen.
Last edited: 2011-05-12 16:07:44 +0200 (CEST)
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B

View full thread Byte zählen - zu große Zahlen?