Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/unix/drawterm/libc/pow10.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include "fmtdef.h"
4
 
5
/*
6
 * this table might overflow 127-bit exponent representations.
7
 * in that case, truncate it after 1.0e38.
8
 * it is important to get all one can from this
9
 * routine since it is used in atof to scale numbers.
10
 * the presumption is that C converts fp numbers better
11
 * than multipication of lower powers of 10.
12
 */
13
 
14
static
15
double	tab[] =
16
{
17
	1.0e0, 1.0e1, 1.0e2, 1.0e3, 1.0e4, 1.0e5, 1.0e6, 1.0e7, 1.0e8, 1.0e9,
18
	1.0e10,1.0e11,1.0e12,1.0e13,1.0e14,1.0e15,1.0e16,1.0e17,1.0e18,1.0e19,
19
	1.0e20,1.0e21,1.0e22,1.0e23,1.0e24,1.0e25,1.0e26,1.0e27,1.0e28,1.0e29,
20
	1.0e30,1.0e31,1.0e32,1.0e33,1.0e34,1.0e35,1.0e36,1.0e37,1.0e38,1.0e39,
21
	1.0e40,1.0e41,1.0e42,1.0e43,1.0e44,1.0e45,1.0e46,1.0e47,1.0e48,1.0e49,
22
	1.0e50,1.0e51,1.0e52,1.0e53,1.0e54,1.0e55,1.0e56,1.0e57,1.0e58,1.0e59,
23
	1.0e60,1.0e61,1.0e62,1.0e63,1.0e64,1.0e65,1.0e66,1.0e67,1.0e68,1.0e69,
24
};
25
 
26
double
27
__fmtpow10(int n)
28
{
29
	int m;
30
 
31
	if(n < 0) {
32
		n = -n;
33
		if(n < (int)(sizeof(tab)/sizeof(tab[0])))
34
			return 1/tab[n];
35
		m = n/2;
36
		return __fmtpow10(-m) * __fmtpow10(m-n);
37
	}
38
	if(n < (int)(sizeof(tab)/sizeof(tab[0])))
39
		return tab[n];
40
	m = n/2;
41
	return __fmtpow10(m) * __fmtpow10(n-m);
42
}