Index: branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj	(revision 16739)
@@ -64,5 +64,5 @@
   <ItemGroup>
     <PackageReference Include="HEAL.Attic">
-      <Version>1.0.0-pre04</Version>
+      <Version>1.0.0</Version>
     </PackageReference>
   </ItemGroup>
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h	(revision 16739)
@@ -9,23 +9,24 @@
 {
     // same values as in OpCodes.cs
-    Add = 1,
-    Sub = 2,
-    Mul = 3,
-    Div = 4,
-    Sin = 5,
-    Cos = 6,
-    Tan = 7,
-    Log = 8,
-    Exp = 9,
-    Var = 18,
-    Const = 20,
-    Power = 22,
-    Root = 23,
-    Square = 28,
-    Sqrt = 29,
-    Absolute = 48,
+    Add                = 1,
+    Sub                = 2,
+    Mul                = 3,
+    Div                = 4,
+    Sin                = 5,
+    Cos                = 6,
+    Tan                = 7,
+    Log                = 8,
+    Exp                = 9,
+    Var                = 18,
+    Const              = 20,
+    Power              = 22,
+    Root               = 23,
+    Square             = 28,
+    Sqrt               = 29,
+    Absolute           = 48,
     AnalyticalQuotient = 49,
-    Cube = 50,
-    CubeRoot = 51
+    Cube               = 50,
+    CubeRoot           = 51,
+    Tanh               = 52
 };
 
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h	(revision 16739)
@@ -64,25 +64,30 @@
             case OpCodes::Exp:
                 {
-                    in.value = std::exp(code[in.childIndex].value);
+                    in.value = hl_exp(code[in.childIndex].value);
                     break;
                 }
             case OpCodes::Log:
                 {
-                    in.value = std::log(code[in.childIndex].value);
+                    in.value = hl_log(code[in.childIndex].value);
                     break;
                 }
             case OpCodes::Sin:
                 {
-                    in.value = std::sin(code[in.childIndex].value);
+                    in.value = hl_sin(code[in.childIndex].value);
                     break;
                 }
             case OpCodes::Cos:
                 {
-                    in.value = std::cos(code[in.childIndex].value);
+                    in.value = hl_cos(code[in.childIndex].value);
                     break;
                 }
             case OpCodes::Tan:
                 {
-                    in.value = std::tan(code[in.childIndex].value);
+                    in.value = hl_tan(code[in.childIndex].value);
+                    break;
+                }
+            case OpCodes::Tanh:
+                {
+                    in.value = hl_tanh(code[in.childIndex].value);
                     break;
                 }
@@ -90,6 +95,6 @@
                 {
                     double x = code[in.childIndex].value;
-                    double y = std::round(code[in.childIndex + 1].value);
-                    in.value = std::pow(x, y);
+                    double y = hl_round(code[in.childIndex + 1].value);
+                    in.value = hl_pow(x, y);
                     break;
                 }
@@ -97,26 +102,26 @@
                 {
                     double x = code[in.childIndex].value;
-                    double y = std::round(code[in.childIndex + 1].value);
-                    in.value = std::pow(x, 1 / y);
+                    double y = hl_round(code[in.childIndex + 1].value);
+                    in.value = hl_pow(x, 1 / y);
                     break;
                 }
             case OpCodes::Sqrt:
                 {
-                    in.value = std::pow(code[in.childIndex].value, 1./2.);
+                    in.value = hl_pow(code[in.childIndex].value, 1./2.);
                     break;
                 }
             case OpCodes::Square:
                 {
-                    in.value = std::pow(code[in.childIndex].value, 2.);
+                    in.value = hl_pow(code[in.childIndex].value, 2.);
                     break;
                 }
             case OpCodes::CubeRoot:
                 {
-                    in.value = std::pow(code[in.childIndex].value, 1./3.);
+                    in.value = hl_pow(code[in.childIndex].value, 1./3.);
                     break;
                 }
             case OpCodes::Cube:
                 {
-                    in.value = std::pow(code[in.childIndex].value, 3.);
+                    in.value = hl_pow(code[in.childIndex].value, 3.);
                     break;
                 }
@@ -130,5 +135,5 @@
                     double x = code[in.childIndex].value;
                     double y = code[in.childIndex + 1].value;
-                    in.value = x / std::sqrt(1 + y*y);
+                    in.value = x / hl_sqrt(1 + y*y);
                     break;
                 }
@@ -228,4 +233,9 @@
                     break;
                 }
+            case OpCodes::Tanh:
+                {
+                    tanh(in.buf, code[in.childIndex].buf);
+                    break;
+                }
             case OpCodes::Log:
                 {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h	(revision 16739)
@@ -14,7 +14,9 @@
 #define hl_cos vdt::fast_cos
 #define hl_tan vdt::fast_tan
+#define hl_tanh vdt::fast_tanh
 #define hl_sqrt vdt::fast_sqrt
 #define hl_pow vdt::fast_pow
 #define hl_round vdt::fast_round
+#define hl_inv vdt::fast_inv
 #else
 #define hl_exp std::exp
@@ -23,7 +25,10 @@
 #define hl_cos std::cos
 #define hl_tan std::tan
+#define hl_tanh std::tanh
 #define hl_sqrt std::sqrt
 #define hl_pow std::pow
 #define hl_round std::round
+#define hl_inv(x) 1. / x;
+
 #endif
 
@@ -47,9 +52,10 @@
 inline void cos(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_cos(b[i]); }
 inline void tan(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_tan(b[i]); }
+inline void tanh(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_tanh(b[i]); }
 inline void sqrt(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_sqrt(b[i]); }
 inline void pow(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_pow(a[i], hl_round(b[i])); };
 inline void root(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_pow(a[i], 1. / hl_round(b[i])); };
 inline void square(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_pow(b[i], 2.); };
-inline void inv(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = 1. / b[i]; }
+inline void inv(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = hl_inv(b[i]); }
 inline void neg(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = -b[i]; }
 inline void abs(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = std::fabs(b[i]); }
@@ -66,9 +72,11 @@
 // vector operations
 inline void neg(double* __restrict a) noexcept { FOR(i) a[i] = -a[i]; }
-inline void inv(double* __restrict a) noexcept { FOR(i) a[i] = 1. / a[i]; }
+inline void inv(double* __restrict a) noexcept { FOR(i) a[i] = hl_inv(a[i]); }
 inline void exp(double* __restrict a) noexcept { FOR(i) a[i] = hl_exp(a[i]); }
 inline void log(double* __restrict a) noexcept { FOR(i) a[i] = hl_log(a[i]); }
 inline void sin(double* __restrict a) noexcept { FOR(i) a[i] = hl_sin(a[i]); }
 inline void cos(double* __restrict a) noexcept { FOR(i) a[i] = hl_cos(a[i]); }
+inline void tan(double* __restrict a) noexcept { FOR(i) a[i] = hl_tan(a[i]); }
+inline void tanh(double* __restrict a) noexcept { FOR(i) a[i] = hl_tanh(a[i]); }
 inline void round(double* __restrict a) noexcept { FOR(i) a[i] = hl_round(a[i]); }
 inline void square(double* __restrict a) noexcept { FOR(i) a[i] = hl_pow(a[i], 2.); }
