Hallo,
ich habe da mal einen kurzen Blick drauf geworfen und folgendes versucht:
Quellcode für "NXT + NXC" aus dem Link oben:
//--------------------------------------------
// Mersenne Twister
//--------------------------------------------
const int N_MTW = 25;
const int M_MTW = 7;
const unsigned long A_MTW[] = {0, 0x8ebfd028};
unsigned long y_MTW[25];
int i_MTW;
bool virgin_MTW=true, new_MTW=true; // geändert
void InitMTW() {
i_MTW = N_MTW+1;
}
// ...
// Bis
long test_rand_MT(){
unsigned long s;
for(int y=0;y<5000;++y) {
s=randM()%10001;
}
return s;
}
Die Matrixsache habe ich weggelassen, da kommen diverse Compilerfehler.
Dazu dieses "Hauptprogramm"
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
float s;
unsigned long time0;
unsigned long time1;
time0 = micros();
s = test_Int_Add();
time1 = micros() - time0;
Serial.print("0 integer add/subtr : ");
Serial.println(time1);
time0 = micros();
s = test_Int_Mult();
time1 = micros() - time0;
Serial.print("1 integer multiply/division : ");
Serial.println(time1);
time0 = micros();
s = test_float_math();
time1 = micros() - time0;
Serial.print("2 float operations : ");
Serial.println(time1);
time0 = micros();
s = test_rand_MT();
time1 = micros() - time0;
Serial.print("3 Mersenne Tw. PRNG (&,^,>>,<<) : ");
Serial.println(time1);
Serial.println();
delay(5000);
}
Die Messwerte hier sind also in Microsekunden, d.h. um 1000 größer als die Vergleichswerte aus dem anderen Link.
Ergebnisse für 3 verschiedene Arduinos:
Leonardo:
0 integer add/subtr : 4
1 integer multiply/division : 4
2 float operations : 4
3 Mersenne Tw. PRNG (&,^,>>,<<) : 107400
Due:
0 integer add/subtr : 2
1 integer multiply/division : 2
2 float operations : 103800
3 Mersenne Tw. PRNG (&,^,>>,<<) : 7735
Galileo:
0 integer add/subtr : 7
1 integer multiply/division : 7
2 float operations : 20095
3 Mersenne Tw. PRNG (&,^,>>,<<) : 918
Ob die ganz kleinen Zahlen echte Messwerte sind, bezweifle ich. Möglicherweise erkennen die Compiler nicht verwendeten Code und entfernen ihn. Wahrscheinlich geben die einfach die minimale Timerauflösung an.