summaryrefslogtreecommitdiff
path: root/test/test.c
blob: bdc11fcd95bd99deb6b6c0ccff3d73ddaa79651c (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
#include <stdio.h>
#include <stdint.h>

// typedef uint32_t SF;
// const int ush=24,ssh=31;
typedef uint16_t SF;
const int ush=11,ssh=15;

SF mul(SF a,SF b){
	SF sg=1;
	if(a>=(1<<ssh)){a=-a; sg*=-1;}
	if(b>=(1<<ssh)){b=-b; sg*=-1;}
	return sg*(SF)(((uint64_t)a*(uint64_t)b)>>ush);
}

SF mk(int i){
	return i<<ush;
}

float flt(SF a){
	float sg=1;
	if(a>=(1<<ssh)){a=-a; sg*=-1;}
	return (float)a/(float)(1<<ush)*sg;
}

int main(void){
	const SF L=mk(-2),R=mk(1);
	const SF T=mk(1),B=-(mk(1));
	for(SF y=T;y!=B-(mk(1)>>4);y-=mk(1)>>4){
		for(SF x=L;x!=R;x+=mk(1)>>5){
			int n=0;
			SF a=x,b=y,a2=mul(a,a),b2=mul(b,b);
			while(n<26&&a2+b2<mk(4)){
				b=mul(mk(2),mul(a,b))+y;
				a=a2-b2+x;
				a2=mul(a,a);
				b2=mul(b,b);
				n++;
			}
			if(n==26)putchar(' ');
			else putchar('A'+n);
		}
		putchar('\n');
	}
}