File: cbrttest.5c

package info (click to toggle)
nickle 2.107
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 3,756 kB
  • sloc: ansic: 27,954; yacc: 1,874; lex: 954; sh: 204; makefile: 13; lisp: 1
file content (35 lines) | stat: -rw-r--r-- 745 bytes parent folder | download
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
/*
 * Nickle test suite
 *
 * cbrt test
 */
library "math-bits.5c"

void check_cbrt()
{
    void check_value (real z, int prec) {
	z = imprecise(z, prec);
	real s = cbrt(z);
	real err = imprecise(z, prec+10) - imprecise(s, prec+10)**3;
	int errdist = exponent(z) - exponent(err);
	if (err != 0 && errdist < prec - 2) {
	    printf("%g = cbrt(%g): error too large (differ at %d bits instead of %d bits)\n",
		   s, z, errdist, prec);
	    errors++;
	}
    }

    printf("Checking cbrt...");
    for (int prec = 10; prec <= 1000; prec *= 10) {
	printf(" %d", prec);
	File::flush(stdout);
	for (real z = 1e-200; z < 1e200; z *= 1.3) {
	    check_value(z, prec);
	    check_value(-z, prec);
	}
    }
    printf("\n");
}

check_cbrt();
exit(errors);