Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 283
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Di 30.01.18 01:14 
Hallo,

ich möchte ein paar Zeilen C-Code in Pascal übersetzen, hänge aber bei folgender Zeile im C-Code:

ausblenden C++-Quelltext
1:
  x ^= (x <<  7) & 0x9D2C5680;					

ausblenden Delphi-Quelltext
1:
  x := x ??? ((e SHL 7AND $9D2C5680);					


Die rechte Seite ist unproblematisch. Aber was bedeutet der Compound-Operator. Der sollte x mit der rechten Seite potenzieren. Aber der Ausdruck rechts kann Milliarden erreichen, dann dauert die Berechnung sehr lange, das scheint mir nicht plausibel.

Hat jemand einen Tipp?

Gruß
GuaAck
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 332
Erhaltene Danke: 47

Linux Raspbian, Win10
C, C++, Python, Java, JavaScript, Delphi7, Casio Basic
BeitragVerfasst: Di 30.01.18 01:48 
Das Dach ist ein XOR operator:

ausblenden C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>

char *to2(int x)  {
  char *b = malloc(9), *p = b, z;
  for (z = 128; z > 0; z >>= 1)
    *p++ = (x & z) ? '1' : '0';
  return b;
}

int main() {
  printf("%s ^\n%s =\n%s\n"
  to2(0b1010), to2(0b1001), 
  to2(0b1010 ^ 0b1001));
}

output;
ausblenden Quelltext
1:
2:
3:
00001010 ^
00001001 =
00000011

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)


Zuletzt bearbeitet von Symbroson am Di 30.01.18 01:51, insgesamt 2-mal bearbeitet

Für diesen Beitrag haben gedankt: GuaAck
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2033
Erhaltene Danke: 374

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 30.01.18 01:49 
Guten Abend GuaAck,

^= sollte ein xor sein:

ausblenden C++-Quelltext
1:
x ^= (x <<  7) & 0x9D2C5680;					

ausblenden Delphi-Quelltext
1:
x := x xor (x shl 7and $9D2C5680					

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 283
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mi 31.01.18 00:26 
Danke Frühlingsrolle,

ja, XOR war mein erster Ansatz. Gab aber ein falsches Ergebnis. Mit Google habe ich dann das mit dem Exponenten (für C) gefunden, aber das ist wohl falsch gewesen.

XOR ist plausibel, also bestätigt: Nicht alles glauben, was man mit Google findet.

Inzwischen habe ich auch die originale Beschreibung zu dem Algorithmus gelesen, da steht klar XOR drin.

Danke,
Gruß GuaAck
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2033
Erhaltene Danke: 374

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 31.01.18 00:39 
Handelt es sich hierbei um...
mt19937 hat folgendes geschrieben:
tempering_b (0x9d2c5680)

The XOR mask used as parameter b in the tempering process of the generation algorithm.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 283
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Do 01.02.18 01:32 
Frühlingsrolle,

Du bist genial, ja genau, Mersenne-Twister.

Soll aktuell der beste Random-Generator sein, deshalb wollte ich ihn in meine Delphi-Bilbliothek übernehmen.

Mein Fehler war trivialer Art, jetzt erzeugt meine Routine die gleichen Werte, wie der Original C-Code.

Gruß
GuaAck