cpow() - seltsames Verhalten



  • Hallo

    Seit Kurzem weist in meinen numerischen Berechnungen die Funktion cpow(), für komplexe Potenzen folgendes Verhalten auf:

    - der erste Aufruf gibt nan(0x800..) + I* nan(08x00..) zurück

    jeder weitere Aufruf ergibt das richtige Resultat, sogar wenn es sich um dieselbe Zeile Code handelt.

    #include <complex.h>
    
    double complex t1;
    
    t1 = cpow(1.5+I*0.2,2.0+I*0.2);  // t1 -> nan
    t1 = cpow(1.5+I*0.2,2.0+I*0.2);  // t1 -> korrektes Resultat
    

    Dasselbe Verhalten wenn cpow() mit double Werten gefüttert wird, egal ob numerische Werte direkt eingegeben wie hier, oder mit Variablen.
    Dies scheint für mich völlig unerklärbar - hoffe jedoch dass ich den Wald vor lauter Bäume nicht sehe, ansonsten könnte es schwieriger werden.

    Glücklicherweise können die Potenzen jedoch grösstenteils leicht durch Multiplikationen ersetzt werden. Trotzdem würde mich eine 'saubere' Lösung interessieren. Vielen Dank.

    Dieser Effekt tritt für mich unerwartet auf, da dieser Teil des Codes seit längerer Zeit unberührt ist, lauffähig war und sich weder Compiler noch OS geändert haben..

    PS:
    Der Programmcode ist 32bit (32bit standard headers) und wird mit gcc 4.3.3
    unter linux (kernel 2.6.28) x86_64 kompiliert


  • Mod

    Zeigt dieser Beispielcode (entsprechend erweitert um main) dieses Verhalten auch, oder gilt das nur in einem bestehenden größeren Projekt?



  • Danke für den Tipp. In einem leeren Projekt konnte ich dieses Verhalten bis jetzt leider nicht reproduzieren - werde dem aber noch nachgehen..

    Edit: Nach Ausprobieren im leeren Projekt kann ich den Fehler nun auch im Ursprünglichen Projekt nicht mehr reproduzieren. Thread kann wohl also geschlossen werden - auch wenn mir die Ursache schleierhaft bleibt..


Anmelden zum Antworten