A. K. schrieb:
> int a, b;
> int64_t result = a * b;
> ist auf einer Maschine mit 32 Bit "int" eine 32-Bit Multiplikation,
> keine 64-Bit Multiplikation. Der Typ des Ergebnisses des "*" Operators
> ist nicht vom Typ links von "=" abhängig, sondern nur vom Typ der
> Operanden.
Danke!
Auf die Idee, sich durch die Hilfe des Compilers zu wühlen, bin ich in
einem Anfall geistiger Umnachtung natürlich nicht gekommen.
Die Hilfe hat folgendes zu sagen:
"To multiply 32 bits by 32 bits to obtain a 64-bit result, cast the
32-bit integer to a 64-bit integer (long long) and then perform the
multiplication operation as follows"
1 | Ex:
|
2 | long long test (int a, int b)
|
3 | {
|
4 | return (long long) a * b;
|
5 | // Same as (long long) a * (long long) b
|
6 | // NOT the same as (long long) (a * b)
|
7 | }
|
Blos: Das ist das, was ich ja schon habe. Anscheinend multipliziert er
weiter 64Bit (siehe Anhang). Vermutlich deshalb, weil Optimierungsstufe
1 beim XC32 das Maximum bei der freien Version ist.
Bleibt mir der inline-Assembler. Da muss ich mich erst mal hinsetzen,
und mir das ansehen. Allerdings hat allein die Compileroptimierung schon
die Rechenzeit auf 40% heruntergedrückt. Möglicherweise reicht das für
meine Anwendung ja aus ;-)