diff number.c @ 3:94c885692eb5

Partial set of fixes and enhancements from Linux box
author Mike Pavone <pavone@retrodev.com>
date Wed, 29 Apr 2009 03:21:23 -0400
parents 76568becd6d6
children 429b5f441381
line wrap: on
line diff
--- a/number.c	Wed Apr 29 02:58:03 2009 -0400
+++ b/number.c	Wed Apr 29 03:21:23 2009 -0400
@@ -1,3 +1,4 @@
+#include <math.h>
 #include <stdlib.h>
 #include "datum.h"
 #include "structs.h"
@@ -259,12 +260,15 @@
 	if(string[i] != '\0')
 	{
 		++i;
-		while(string[i] != '\0' && string[i] >= 0 && string[i] <= 9)
+		while(string[i] != '\0' && string[i] >= '0' && string[i] <= '9')
 		{
 			value += ((double)(string[i] - '0'))/divisor;
 			divisor *= 10;
+			++i;
 		}
 	}
+	if(neg_flag)
+		value = 0.0-value;
 	return value;
 }
 #endif
@@ -348,3 +352,76 @@
 	return 0;
 }
 
+int vis_real_mult(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real *= inputlist[1]->c.real;
+	release_ref(inputlist[1]);
+	return 0;
+}
+#define PI	3.14159265
+int vis_real_cos(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = cos(inputlist[0]->c.real * PI/180.0);
+	return 0;
+}
+
+int vis_real_sin(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = sin(inputlist[0]->c.real * PI/180.0);
+	return 0;
+}
+
+int vis_real_tan(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = tan(inputlist[0]->c.real * PI/180.0);
+	return 0;
+}
+
+int vis_real_arccos(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = acos(inputlist[0]->c.real)*180.0/PI;
+	return 0;
+}
+
+int vis_real_arcsin(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = asin(inputlist[0]->c.real)*180.0/PI;
+	return 0;
+}
+
+int vis_real_arctan(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = atan(inputlist[0]->c.real)*180.0/PI;
+	return 0;
+}
+
+int vis_real_exp(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = pow(inputlist[0]->c.real, inputlist[1]->c.real);
+	release_ref(inputlist[1]);
+	return 0;
+}
+
+int vis_real_sqrt(datum ** inputlist, queue_entry * worker_entry)
+{
+	inputlist[0] = copy_datum(inputlist[0], 0);
+	inputlist[0]->c.real = sqrt(inputlist[0]->c.real);
+	return 0;
+}
+
+int vis_whole_fromreal(datum ** inputlist, queue_entry * worker_entry)
+{
+	datum * output = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program);
+	output->c.integers.num_a = inputlist[0]->c.real;
+	release_ref(inputlist[0]);
+	inputlist[0] = output;
+	return 0;
+}
\ No newline at end of file