12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include "stdafx.h"
- #include "defs.h"
- void
- eval_float(void)
- {
- push(cadr(p1));
- eval();
- yyfloat();
- eval(); // normalize
- }
- void
- yyfloat(void)
- {
- int i, h;
- save();
- p1 = pop();
- if (iscons(p1)) {
- h = tos;
- while (iscons(p1)) {
- push(car(p1));
- yyfloat();
- p1 = cdr(p1);
- }
- list(tos - h);
- } else if (p1->k == TENSOR) {
- push(p1);
- copy_tensor();
- p1 = pop();
- for (i = 0; i < p1->u.tensor->nelem; i++) {
- push(p1->u.tensor->elem[i]);
- yyfloat();
- p1->u.tensor->elem[i] = pop();
- }
- push(p1);
- } else if (p1->k == NUM) {
- push(p1);
- bignum_float();
- } else if (p1 == symbol(PI))
- push_double(M_PI);
- else if (p1 == symbol(E))
- push_double(M_E);
- else
- push(p1);
- restore();
- }
- #if SELFTEST
- static char *s[] = {
- "float(x)",
- "x",
- "float(1/2)",
- "0.5",
- "float(pi)",
- "3.14159",
- "float(exp(1))",
- "2.71828",
- "x=(1/2,1/4)",
- "",
- "float(x)",
- "(0.5,0.25)",
- "x",
- "(1/2,1/4)",
- "x=quote(x)",
- "",
- };
- void
- test_float(void)
- {
- test(__FILE__, s, sizeof s / sizeof (char *));
- }
- #endif
|