valarray Sign Problem



  • Hi!

    Ich hab' die letzten Stunden verzweifelt damit verbracht, in einer riesigen numerischen Berechnung nach der Ursache eines Bugs zu suchen und auf ein Minimum herunter zu brechen. Folgender Test-Code (Intel C++ 16.0):

    #include <iostream>
    #include <valarray>
    
    int main() {
    std::valarray<double> a{ 1., -0.3, 2.3, -0.02 };
    	std::valarray<double> b{ -0.3, 0.038, -1.0036, -0.739 };
    	double c = 2.34;
    	a -= c * b;
    	for(auto elem : a) std::cout << elem << ' ';
    }
    

    Im Debug-Modus liefert mir das das richtige Ergebnis. Im Release-Modus jedoch sind die Vorzeichen geflipt. Das Phänomen tritt nur mit dem Intel-Compiler auf, Visual Studio 2015 liefert im Debug- und Release-Modus das gleiche Ergebnis? Ist das ein Bug bzw. kann das jemand bestätigen?

    Danke!



  • normalerweise wäre bei valarrays wohl die erste frage, ob du nicht ein und denselben slice in ein und demselben ausdruck verwendet; das kann unter gewissen umständen (quellslice ist bzw. überlappt zielslice) undefiniert sein. dein beispiel allerdings sollte ohne probleme funktionieren.

    als alternative kommt wohl blitz in frage. (siehe http://blitz.sourceforge.net/ )
    sollte generell besser sein als valarrays. um es mit n. josuttis zu sagen:

    The valarray classes were not designed very well. In fact, nobody tried to determine whether the final specification worked. This happened because nobody felt “responsible” for these classes. The people who introduced valarrays to the C++ standard library left the committee long before the first C++ standard was finished.


Log in to reply