1#include <stdint.h> 2#include <stdio.h> 3#include "mtest.h" 4 5static struct l_l t[] = { 6#if LDBL_MANT_DIG == 53 7#include "crlibm/cosh.h" 8#include "ucb/cosh.h" 9#include "sanity/cosh.h" 10#include "special/cosh.h" 11 12#elif LDBL_MANT_DIG == 64 13#include "sanity/coshl.h" 14#include "special/coshl.h" 15 16#elif LDBL_MANT_DIG == 113 17#ifdef LD128_ENABLE 18#include "ld128/coshl.h" 19#endif 20 21#endif 22}; 23 24int main(void) 25{ 26 #pragma STDC FENV_ACCESS ON 27 long double y; 28 float d; 29 int e, i, err = 0; 30 struct l_l *p; 31 32 for (i = 0; i < sizeof t/sizeof *t; i++) { 33 p = t + i; 34 35 if (p->r < 0) 36 continue; 37 fesetround(p->r); 38 feclearexcept(FE_ALL_EXCEPT); 39 y = coshl(p->x); 40 e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW); 41 42 if (!checkexcept(e, p->e, p->r)) { 43 printf("%s:%d: bad fp exception: %s coshl(%La)=%La, want %s", 44 p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e)); 45 printf(" got %s\n", estr(e)); 46 err++; 47 } 48 d = ulperrl(y, p->y, p->dy); 49 if (!checkulp(d, p->r)) { 50 printf("%s:%d: %s coshl(%La) want %La got %La ulperr %.3f = %a + %a\n", 51 p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy); 52 err++; 53 } 54 } 55 return !!err; 56} 57