comparison 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
comparison
equal deleted inserted replaced
2:73e978d590c7 3:94c885692eb5
1 #include <math.h>
1 #include <stdlib.h> 2 #include <stdlib.h>
2 #include "datum.h" 3 #include "datum.h"
3 #include "structs.h" 4 #include "structs.h"
4 #ifdef SEGA 5 #ifdef SEGA
5 long atol(const char * string) 6 long atol(const char * string)
257 ++i; 258 ++i;
258 } 259 }
259 if(string[i] != '\0') 260 if(string[i] != '\0')
260 { 261 {
261 ++i; 262 ++i;
262 while(string[i] != '\0' && string[i] >= 0 && string[i] <= 9) 263 while(string[i] != '\0' && string[i] >= '0' && string[i] <= '9')
263 { 264 {
264 value += ((double)(string[i] - '0'))/divisor; 265 value += ((double)(string[i] - '0'))/divisor;
265 divisor *= 10; 266 divisor *= 10;
266 } 267 ++i;
267 } 268 }
269 }
270 if(neg_flag)
271 value = 0.0-value;
268 return value; 272 return value;
269 } 273 }
270 #endif 274 #endif
271 275
272 int vis_stringtoreal(datum ** inputlist, queue_entry * worker_entry) 276 int vis_stringtoreal(datum ** inputlist, queue_entry * worker_entry)
346 inputlist[0]->c.real /= inputlist[1]->c.real; 350 inputlist[0]->c.real /= inputlist[1]->c.real;
347 release_ref(inputlist[1]); 351 release_ref(inputlist[1]);
348 return 0; 352 return 0;
349 } 353 }
350 354
355 int vis_real_mult(datum ** inputlist, queue_entry * worker_entry)
356 {
357 inputlist[0] = copy_datum(inputlist[0], 0);
358 inputlist[0]->c.real *= inputlist[1]->c.real;
359 release_ref(inputlist[1]);
360 return 0;
361 }
362 #define PI 3.14159265
363 int vis_real_cos(datum ** inputlist, queue_entry * worker_entry)
364 {
365 inputlist[0] = copy_datum(inputlist[0], 0);
366 inputlist[0]->c.real = cos(inputlist[0]->c.real * PI/180.0);
367 return 0;
368 }
369
370 int vis_real_sin(datum ** inputlist, queue_entry * worker_entry)
371 {
372 inputlist[0] = copy_datum(inputlist[0], 0);
373 inputlist[0]->c.real = sin(inputlist[0]->c.real * PI/180.0);
374 return 0;
375 }
376
377 int vis_real_tan(datum ** inputlist, queue_entry * worker_entry)
378 {
379 inputlist[0] = copy_datum(inputlist[0], 0);
380 inputlist[0]->c.real = tan(inputlist[0]->c.real * PI/180.0);
381 return 0;
382 }
383
384 int vis_real_arccos(datum ** inputlist, queue_entry * worker_entry)
385 {
386 inputlist[0] = copy_datum(inputlist[0], 0);
387 inputlist[0]->c.real = acos(inputlist[0]->c.real)*180.0/PI;
388 return 0;
389 }
390
391 int vis_real_arcsin(datum ** inputlist, queue_entry * worker_entry)
392 {
393 inputlist[0] = copy_datum(inputlist[0], 0);
394 inputlist[0]->c.real = asin(inputlist[0]->c.real)*180.0/PI;
395 return 0;
396 }
397
398 int vis_real_arctan(datum ** inputlist, queue_entry * worker_entry)
399 {
400 inputlist[0] = copy_datum(inputlist[0], 0);
401 inputlist[0]->c.real = atan(inputlist[0]->c.real)*180.0/PI;
402 return 0;
403 }
404
405 int vis_real_exp(datum ** inputlist, queue_entry * worker_entry)
406 {
407 inputlist[0] = copy_datum(inputlist[0], 0);
408 inputlist[0]->c.real = pow(inputlist[0]->c.real, inputlist[1]->c.real);
409 release_ref(inputlist[1]);
410 return 0;
411 }
412
413 int vis_real_sqrt(datum ** inputlist, queue_entry * worker_entry)
414 {
415 inputlist[0] = copy_datum(inputlist[0], 0);
416 inputlist[0]->c.real = sqrt(inputlist[0]->c.real);
417 return 0;
418 }
419
420 int vis_whole_fromreal(datum ** inputlist, queue_entry * worker_entry)
421 {
422 datum * output = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program);
423 output->c.integers.num_a = inputlist[0]->c.real;
424 release_ref(inputlist[0]);
425 inputlist[0] = output;
426 return 0;
427 }