summaryrefslogtreecommitdiff
path: root/big.h
blob: ce8b91cd0933b296e7eb6def9e2cd5909cd650fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* DEFINITIONS FOR MIRANDA INTEGER PACKAGE (variable length) */

/**************************************************************************
 * Copyright (C) Research Software Limited 1985-90.  All rights reserved. *
 * The Miranda system is distributed as free software under the terms in  *
 * the file "COPYING" which is included in the distribution.              *
 *                                                                        *
 * Revised to C11 standard and made 64bit compatible, January 2020        *
 *------------------------------------------------------------------------*/

#define SIGNBIT 020000000000
   /* most significant bit of 32 bit word */
#define IBASE 0100000
   /* 2^15 (ie 8^5) so digit is a positive short */
#define MAXDIGIT 077777
#define DIGITWIDTH 15
#define digit0(x) (hd[x]&MAXDIGIT)
#define digit(x) hd[x]
#define rest(x) tl[x]
#define poz(x) (!(hd[x]&SIGNBIT))
#define neg(x) (hd[x]&SIGNBIT)
#define bigzero(x) (!digit(x)&&!rest(x))
#define getsmallint(x) (hd[x]&SIGNBIT?-digit0(x):digit(x))
#define stosmallint(x) make(INT,(x)<0?SIGNBIT|(-(x)):(x),0)
long long get_int(word);
word sto_int(long long);
double bigtodbl(word);
long double bigtoldbl(word); /* not currently used */
double biglog(word);
double biglog10(word);
int bigcmp(word,word);
word bigdiv(word,word);
word bigmod(word,word);
word bignegate(word);
word bigoscan(char *,char *);
word bigplus(word,word);
word bigpow(word,word);
word bigscan(char *);
void bigsetup(void);
word bigsub(word,word);
word bigtimes(word,word);
word bigtostr(word);
word bigtostr8(word);
word bigtostrx(word);
word bigxscan(char *,char *);
word dbltobig(double);
int isnat(word);
word strtobig(word,int);
#define force_dbl(x) (tag[x]==INT?bigtodbl(x):get_dbl(x))
#define PTEN 10000
   /* largest power of ten < IBASE (used by bigscan) */
#define PSIXTEEN 4096
   /* largest power of sixteen <= IBASE (used by bigtostr) */
#define PEIGHT 0100000
   /* (=32768) largest power of eight <= IBASE (used by bigtostr) */
#define TENW 4
   /* number of factors of 10 in PTEN */
#define OCTW 5
   /* number of factors of 8 in IBASE */

/* END OF DEFINITIONS FOR INTEGER PACKAGE */