浏览代码

Fix for math_xrt

Marco Bambini 7 年之前
父节点
当前提交
8aa1c669bb
共有 2 个文件被更改,包括 23 次插入22 次删除
  1. 22 21
      src/optionals/gravity_math.c
  2. 1 1
      src/shared/gravity_value.h

+ 22 - 21
src/optionals/gravity_math.c

@@ -224,27 +224,28 @@ static bool math_xrt (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
     if (VALUE_ISA_NULL(value) || VALUE_ISA_NULL(base)) {
         RETURN_VALUE(VALUE_FROM_INT(0), rindex);
     }
-
-    if (VALUE_ISA_INT(value) && VALUE_ISA_INT(base)) {
-        gravity_float_t computed_value = (gravity_float_t)pow((gravity_float_t)value.n, 1.0/base.n);
-        RETURN_VALUE(VALUE_FROM_FLOAT(computed_value), rindex);
-    }
-
-    if (VALUE_ISA_INT(value) && VALUE_ISA_FLOAT(base)) {
-        gravity_float_t computed_value = (gravity_float_t)pow((gravity_float_t)value.n, 1.0/base.f);
-        RETURN_VALUE(VALUE_FROM_FLOAT(computed_value), rindex);
-    }
-
-    if (VALUE_ISA_FLOAT(value) && VALUE_ISA_INT(base)) {
-        gravity_float_t computed_value = (gravity_float_t)pow((gravity_float_t)value.f, 1.0/base.n);
-        RETURN_VALUE(VALUE_FROM_FLOAT(computed_value), rindex);
-    }
-
-    if (VALUE_ISA_FLOAT(value) && VALUE_ISA_INT(base)) {
-        gravity_float_t computed_value = (gravity_float_t)pow((gravity_float_t)value.f, 1.0/base.f);
-        RETURN_VALUE(VALUE_FROM_FLOAT(computed_value), rindex);
-    }
-
+    
+    gravity_float_t n1;
+    gravity_float_t n2;
+    
+    if (VALUE_ISA_INT(value)) {
+        n1 = (gravity_float_t)value.n;
+    } else if (VALUE_ISA_FLOAT(value)) {
+        n1 = value.f;
+    } else goto report_error;
+    
+    if (VALUE_ISA_INT(base)) {
+        n2 = (gravity_float_t)base.n;
+    } else if (VALUE_ISA_FLOAT(base)) {
+        n2 = base.f;
+    } else goto report_error;
+    
+    if (n2 == 0.0) goto report_error;
+    
+    gravity_float_t computed_value = (gravity_float_t)POW(n1, 1.0/n2);
+    RETURN_VALUE(VALUE_FROM_FLOAT(computed_value), rindex);
+    
+report_error:
     // should be NaN
     RETURN_VALUE(VALUE_FROM_UNDEFINED, rindex);
 }

+ 1 - 1
src/shared/gravity_value.h

@@ -66,7 +66,7 @@
 extern "C" {
 #endif
 
-#define GRAVITY_VERSION						"0.5.5"     // git tag 0.5.4
+#define GRAVITY_VERSION						"0.5.5"     // git tag 0.5.5
 #define GRAVITY_VERSION_NUMBER				0x000505    // git push --tags
 #define GRAVITY_BUILD_DATE                  __DATE__