Hallo zusammen,
ich programmiere gerade einen Cortex-M3 und habe das Problem, dass der
Rückgabewert von sqrt() stets dem des Arguments entspricht. Es wird also
nicht die Wurzel gezogen, sondern immer die unveränderte Zweierpotenz
zurückgegeben.
Beispielcode:
1 | volatile double bla = 4;
|
2 | c = (double)sqrt( (double)bla );
|
Die Variable c hat nach Ausführung den Wert 4. Selbiges mit allen
anderen Werten für 'bla', selbst für negative, was mich wundert, da
sqrt() dann lt. Google eigentlich einen domain error auslösen sollte.
Der Assemblycode sieht folgendermaßen aus:
1 | (261) volatile double bla = 4;
|
2 | 2000074E mov.w r2, #0
|
3 | 20000752 mov.w r3, #0
|
4 | 20000756 movt r3, #16400 ; 0x4010
|
5 | 2000075A strd r2, r3, [r7, #48] ; 0x30
|
6 | (262) c = (double)sqrt( (double)bla );
|
7 | 2000075E ldrd r2, r3, [r7, #48] ; 0x30
|
8 | 20000762 mov r0, r2
|
9 | 20000764 mov r1, r3
|
10 | 20000766 bl 0x200019ac <sqrt>
|
11 | 2000076A movw r3, #11760 ; 0x2df0
|
12 | 2000076E movt r3, #8192 ; 0x2000
|
13 | 20000772 strd r0, r1, [r3]
|
Ich habe korrekt "math.h" inkludiert und die IDE Em::Blocks angewiesen
libm.a einzubinden (siehe Screenshot).
Hat jemand Tipps wie ich das Problem beheben könnte?
Danke!