Thread "Konvertierung" in einer Gleichung (4 answers)
Opened by meowi at 2011-08-06 19:11

topeg
 2011-08-06 22:47
#151281 #151281
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.

ungetestet und unsicher ob das so richtig ist:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub as_int
{
  my $x=shift;

  # nur 32 Bit
  $x=($x%2**32)*($x>0?1:-1);

  # Übergang bestimmen
  if($x < ((2**32)/2)*-1 || $x > ((2**32)/2)-1)
  { $x*=-1; }

  return x;
}

Last edited: 2011-08-06 22:49:21 +0200 (CEST)

View full thread "Konvertierung" in einer Gleichung