Mein Problem ist nun die Realisierung von dieser Gleichung in Perl. Hat vllt. jemand eine Idee, wie ich dies Bewerkstelligen kann?
Wenn ich bignum einbinde, bekomme ich (wie erwartet) das 2te Ergebnis.
Last edited: 2011-08-06 19:13:06 +0200 (CEST)
+2 replies
GwenDragon
2011-08-06 19:17
User since 2005-01-17
14875
Artikel Admin1
Ich kann es gerade nicht testen, aber solltest du nicht bigint anstatt bignum verwenden?
Soweit ich das sehe ist das Problem dass bei int (32 Bit) Eine Zahl über ((2**32)/2)-1 als negative Zahl größer gleich -(2**32)/2 dargestellt wird und umgekehrt.
Das ist auf einem 64bit System anderes (zumindest in allen Compilersprachen) das da ist int eine 64 Bit Zahl und die Grenze ist ((2**64)/2)-1
Willst du dieses verhalten simulieren musst du nach jeder Rechung schauen wann die Zahl kleiner als -(2**32)/2 ist und wann größer als ((2**32)/2)-1, und den Wert negieren.
sub as_int{my$x=shift;# nur 32 Bit$x=($x%2**32)*($x>0?1:-1);# Übergang bestimmenif($x< ((2**32)/2)*-1 || $x >((2**32)/2)-1){$x*=-1;}return x;}
Last edited: 2011-08-06 22:49:21 +0200 (CEST)
meowi
2011-08-07 11:01
User since 2011-08-06
3
Artikel BenutzerIn
Hi,
so wie du es vermutest hatte ich es nun auch gelöst (nur etwas anders)
Ich rechne innerhalb der Gleichung (dort wo int sein soll) % 2147483648.
Ein auftretendes Problem ist leider noch, dass anscheinend manchmal ein weiteres - 2147483648 nötig ist.
Dies scheint aber etwas Java Spezifisches zu sein.
Meine Vermutung ist, dass noch geprüft wird ob