summaryrefslogtreecommitdiff
path: root/Utilib/src/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'Utilib/src/common.c')
-rw-r--r--Utilib/src/common.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/Utilib/src/common.c b/Utilib/src/common.c
new file mode 100644
index 0000000..80ae291
--- /dev/null
+++ b/Utilib/src/common.c
@@ -0,0 +1,25 @@
+#define FREESTEAM_BUILDING_LIB
+#include "common.h"
+
+/* ipow: public domain by Mark Stephen with suggestions by Keiichi Nakasato */
+double ipow(double x, int n){
+ double t = 1.0;
+
+ if(!n)return 1.0; /* At the top. x^0 = 1 */
+
+ if (n < 0){
+ n = -n;
+ x = 1.0/x; /* error if x == 0. Good */
+ } /* ZTC/SC returns inf, which is even better */
+
+ if (x == 0.0)return 0.0;
+
+ do{
+ if(n & 1)t *= x;
+ n /= 2; /* KN prefers if (n/=2) x*=x; This avoids an */
+ x *= x; /* unnecessary but benign multiplication on */
+ }while(n); /* the last pass, but the comparison is always
+ true _except_ on the last pass. */
+
+ return t;
+}