|
|
1.1 root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
2: /* $Header: B1num.h,v 1.1 84/06/28 00:48:38 timo Exp $ */
3:
4: /* Definitions for number internals */
5:
6: typedef struct{double p, q;} number;
7: typedef double integer;
8: #define Zero ((integer) 0)
9: #define One ((integer) 1)
10: #define Two ((integer) 2)
11:
12: #define Checknum(v) if ((v)->type != Num) error("value not a number")
13: #define Numerator(v) ((integer) ((number *)Ats(v))->p)
14: #define Denominator(v) ((integer) ((number *)Ats(v))->q)
15: #define Exact(v) (((number *)Ats(v))->q != Zero)
16: #define Integral(v) (Exact(v) && (Denominator(v)==One))
17: #define Approxval(v) (((number *)Ats(v))->p)
18: #define Numval(v) (Exact(v) ? Numerator(v)/Denominator(v) : Approxval(v))
19:
20: value mk_int();
21: value mk_approx();
22: value mk_exact();
23:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.