xref: /plan9/sys/src/cmd/eqn/sqrt.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include "e.h"
2*3e12c5d1SDavid du Colombier 
sqrt(int p2)3*3e12c5d1SDavid du Colombier void sqrt(int p2)
4*3e12c5d1SDavid du Colombier {
5*3e12c5d1SDavid du Colombier 	static int af = 0;
6*3e12c5d1SDavid du Colombier 	int nps;	/* point size for radical */
7*3e12c5d1SDavid du Colombier 	double radscale = 0.95;
8*3e12c5d1SDavid du Colombier 
9*3e12c5d1SDavid du Colombier 	if (ttype == DEVPOST)
10*3e12c5d1SDavid du Colombier 		radscale = 1.05;
11*3e12c5d1SDavid du Colombier 	nps = ps * radscale * eht[p2] / EM(1.0,ps) + 0.99;	/* kludgy */
12*3e12c5d1SDavid du Colombier 	nps = max(EFFPS(nps), ps);
13*3e12c5d1SDavid du Colombier 	yyval = p2;
14*3e12c5d1SDavid du Colombier 	if (ttype == DEVCAT || ttype == DEVAPS)
15*3e12c5d1SDavid du Colombier 		eht[yyval] = EM(1.2, nps);
16*3e12c5d1SDavid du Colombier 	else if (ttype == DEVPOST)
17*3e12c5d1SDavid du Colombier 		eht[yyval] = EM(1.15, nps);
18*3e12c5d1SDavid du Colombier 	else		/* DEV202, DEVPOST */
19*3e12c5d1SDavid du Colombier 		eht[yyval] = EM(1.15, nps);
20*3e12c5d1SDavid du Colombier 	dprintf(".\tS%d <- sqrt S%d;b=%g, h=%g, nps=%d\n",
21*3e12c5d1SDavid du Colombier 		yyval, p2, ebase[yyval], eht[yyval], nps);
22*3e12c5d1SDavid du Colombier 	printf(".as %d \\|\n", yyval);
23*3e12c5d1SDavid du Colombier 	nrwid(p2, ps, p2);
24*3e12c5d1SDavid du Colombier 	if (af++ == 0)
25*3e12c5d1SDavid du Colombier 		printf(".af 10 01\n");	/* make it two digits when it prints */
26*3e12c5d1SDavid du Colombier 	printf(".nr 10 %.3fu*\\n(.su/10\n", 9.2*eht[p2]);	/* this nonsense */
27*3e12c5d1SDavid du Colombier 			/* guesses point size corresponding to height of stuff */
28*3e12c5d1SDavid du Colombier 	printf(".ds %d \\v'%gm'\\s(\\n(10", yyval, REL(ebase[p2],ps));
29*3e12c5d1SDavid du Colombier 	if (ttype == DEVCAT || ttype == DEVAPS)
30*3e12c5d1SDavid du Colombier 		printf("\\v'-.2m'\\(sr\\l'\\n(%du\\(rn'\\v'.2m'", p2);
31*3e12c5d1SDavid du Colombier 	else		/* DEV202, DEVPOST so far */
32*3e12c5d1SDavid du Colombier 		printf("\\(sr\\l'\\n(%du\\(rn'", p2);
33*3e12c5d1SDavid du Colombier 	printf("\\s0\\v'%gm'\\h'-\\n(%du'\\^\\*(%d\n", REL(-ebase[p2],ps), p2, p2);
34*3e12c5d1SDavid du Colombier 	lfont[yyval] = rfont[yyval] = ROM;
35*3e12c5d1SDavid du Colombier }
36