Hallo Community,
ich hoffe, dass ich hier an der richtigen Stelle bin mit meinem Problem.
Folgendes Problem: Ich beschäftige mich schon seit Längerem mit C++ AMP und gerade stehe ich vor einem echt komischen Problem. Innerhalb meiner "parallel_for_each" benutze ich die tanhf Funktion (concurrency::fast_math::tanhf). Die Funktion
berechnet mir alle Werte wie sie soll, allerdings nur für übergebene Werte die kleiner sind als 87.4. Ab dieser Zahl scheint die Funktion fehlerhaft zu arbeiten und liefert als Ergebnis 0 zurück. Da die tanh Funktion gegen 1 konvergiert würde ich allerdings
als Ergebnis 1.0 oder sowas wie 0.9999 erwarten.
Ab einem Wert von 88.8 liefert die Funktion gar kein gültiges Ergebnis mehr zurück.
Ich hab mal ein kleines Testprogramm geschrieben, mit welchem man den Fehler einfach nachvollziehen kann:
#include <iostream>
#include <amp.h>
#include <amp_math.h>
using namespace concurrency;
int main()
{
int v[1];
float arr[3];
array_view<float> resArr(3, arr);
array_view<int> av(1, v);
parallel_for_each(av.extent, [=](index<1> idx) restrict(amp)
{
resArr(0) = concurrency::fast_math::tanhf(87.3f);
resArr(1) = concurrency::fast_math::tanhf(87.4f);
resArr(2) = concurrency::fast_math::tanhf(88.8f);
});
resArr.synchronize();
std::cout << "Ergebnis von tanh(87.3f) = " << arr[0] << std::endl;
std::cout << "Ergebnis von tanh(87.4f) = " << arr[1] << std::endl;
std::cout << "Ergebnis von tanh(88.8f) = " << arr[2] << std::endl;
byte x;
std::cin >> x;
}
Kann mir jemand sagen, warum dieser Fehler auftritt, bzw. was ich falsch mache??
Viele Dank schon mal :)