Index: branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/README.md
===================================================================
--- branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/README.md	(revision 16332)
+++ branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/README.md	(revision 16349)
@@ -11,5 +11,5 @@
 - Visual Studio
 
-    `cmake -G "Microsoft Visual Studio 15 2017 [arch]" <path-to-repository>`. Leave `arch` empty for x86 or `Win64` for x64. 
+    `cmake -G "Visual Studio 15 2017 [arch]" <path-to-repository>`. Leave `arch` empty for x86 or `Win64` for x64. 
     
     `cmake --build . --config Release`
Index: branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h
===================================================================
--- branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h	(revision 16332)
+++ branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/instruction.h	(revision 16349)
@@ -23,5 +23,9 @@
     Root = 23,
     Square = 28,
-    Sqrt = 29
+    Sqrt = 29,
+    Absolute = 48,
+    AnalyticalQuotient = 49,
+    Cube = 50,
+    CubeRoot = 51
 };
 
Index: branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h
===================================================================
--- branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h	(revision 16332)
+++ branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/interpreter.h	(revision 16349)
@@ -12,4 +12,5 @@
         switch (in.opcode)
         {
+            case OpCodes::Const: /* nothing to do */ break;
             case OpCodes::Var:
                 {
@@ -105,4 +106,32 @@
                     break;
                 }
+            case OpCodes::Square:
+                {
+                    in.value = std::pow(code[in.childIndex].value, 2.);
+                    break;
+                }
+            case OpCodes::CubeRoot:
+                {
+                    in.value = std::pow(code[in.childIndex].value, 1./3.);
+                    break;
+                }
+            case OpCodes::Cube:
+                {
+                    in.value = std::pow(code[in.childIndex].value, 3.);
+                    break;
+                }
+            case OpCodes::Absolute:
+                {
+                    in.value = std::abs(code[in.childIndex].value);
+                    break;
+                }
+            case OpCodes::AnalyticalQuotient:
+                {
+                    double x = code[in.childIndex].value;
+                    double y = code[in.childIndex + 1].value;
+                    in.value = x / std::sqrt(1 + y*y);
+                    break;
+                }
+            default: in.value = NAN;
         }
     }
@@ -131,4 +160,5 @@
                     break;
                 }
+            case OpCodes::Const: /* nothing to do because buffers for constants are already set */ break;
             case OpCodes::Add:
                 {
@@ -222,8 +252,35 @@
             case OpCodes::Square:
                 {
-                    square(in.buf, code[in.childIndex].buf);
-                    break;
-                }
-        }
+                    pow(in.buf, code[in.childIndex].buf, 2.);
+                    break;
+                }
+            case OpCodes::Sqrt:
+                {
+                    pow(in.buf, code[in.childIndex].buf, 1./2.);
+                    break;
+                }
+            case OpCodes::CubeRoot:
+                {
+                    pow(in.buf, code[in.childIndex].buf, 1./3.);
+                    break;
+                }
+            case OpCodes::Cube:
+                {
+                    pow(in.buf, code[in.childIndex].buf, 3.);
+                    break;
+                }
+            case OpCodes::Absolute:
+                {
+                    abs(in.buf, code[in.childIndex].buf);
+                    break;
+                }
+            case OpCodes::AnalyticalQuotient:
+                {
+                    load(in.buf, code[in.childIndex].buf);
+                    analytical_quotient(in.buf, code[in.childIndex + 1].buf);
+                    break;
+                }
+            default: load(in.buf, NAN);
+            }
     }
 }
Index: branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h
===================================================================
--- branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h	(revision 16332)
+++ branches/2915-AbsoluteSymbol/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/NativeInterpreter-0.1/src/vector_operations.h	(revision 16349)
@@ -53,4 +53,6 @@
 inline void inv(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] = 1. / 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::abs(b[i]); }
+inline void analytical_quotient(double* __restrict a, double const * __restrict b) noexcept { FOR(i) a[i] /= hl_sqrt(b[i]*b[i] + 1.); }
 
 // vector - scalar operations
@@ -60,4 +62,5 @@
 inline void mul(double* __restrict a, double s) noexcept { FOR(i) a[i] *= s; }
 inline void div(double* __restrict a, double s) noexcept { FOR(i) a[i] /= s; }
+inline void pow(double* __restrict dst, double const * __restrict src, double s) noexcept { FOR(i) dst[i] = hl_pow(src[i], s); }
 
 // vector operations
