Mercurial > repos > rhope
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