acosh / asinh / atanh
-
Hallo Gemeinde,
ich versuche hier gerade Openflower unter Visual Studio 2012 zu übersetzen. Dabei stößt sich der Compiler an den Funktionen acosh, asinh und atanh. Ich habe dann versucht die Funktionen mit ihrem Namesraum anzugeben also
node->result = Concurrency::precise_math::asinh( node->right->result );
die Variablen sind alle double.
Aber der Compiler bringt folgende Fehlermeldung
1>c:\users\andreas\documents\entwicklung\openflower-v1.0\parser.cpp(707): error C3930: 'Concurrency::precise_math::acosh' : Keine überladene Funktion verfügt über Einschränkungsspezifizierer, die mit dem Ambient-Kontext 'Parser::evaluateNodeFunction' kompatibel sind.
Die Funktionen sind aber sowohl als float als auch als double in in amp_math.h deklariert. Dort steht nur etwas von ristrict(amp) was ich nicht verstehe.
Könnt Ihr mir erklären wie ich die Funktionen nutzen kann, oder muß ich sie selbst implementieren (fände ich nicht so schön, wenn sie doch schon da sind).
-
Wieso genau verwendest du AMP?
-
dot schrieb:
Wieso genau verwendest du AMP?
Weil ich unter VS2012 nur dort die drei gesuchten Funktionen gefunden habe. Die sind in dem gegebenen Code (Sourcforge / openflower) gegeben.
Sonst habe ich nur die mathematische Beschreibung der Funktionen gefunden.
http://www.euclideanspace.com/maths/geometry/trig/index.htm
Diese habe ich fürs erste implementiert.#pragma once #include <cmath> inline double asinh(double x) { return log(x+sqrt(x*x+1)); } inline float asinh(float x) { return log(x+sqrt(x*x+1)); } inline double acosh(double x) { return fabs(x) < 1.0 ? log(x + sqrt(1.0 - x * x)) : log(x + sqrt(x * x - 1.0 )); } inline float acosh(float x) { return fabs(x) < 1.0f ? log(x + sqrt(1.0f - x * x)) : log(x + sqrt(x * x - 1.0f)); } inline double atanh(double x) { return 0.5 * fabs(x) < 1.0 ? log((x - 1.0 ) / (x + 1.0 )) : log((x - 1.0 ) / (x + 1.0 )); } inline float atanh(float x) { return 0.5f * fabs(x) < 1.0f ? log((x - 1.0f) / (x + 1.0f)) : log((x - 1.0f) / (x + 1.0f)); }
Ich hätte aber lieber eine Bibliotheksroutine verwendet.
-
Diese Funktionen gibt's erst mit VS2013.
-
EinGast schrieb:
Diese Funktionen gibt's erst mit VS2013.
Nun in den 2012er Header <amp_math.h> im Namespace "Concurrency::precise_math" sind sie enthalten, sonst hätte ich ja nie gefragt.