2 #include <UnitTest++.h>
15 for(
int i=0; i < 2048; ++i )
18 char *p =
static_cast<char*
>(pool.
avx_alloc(sz));
19 size_t ip =
reinterpret_cast<size_t>(p);
22 for(
size_t j=0; j < sz; ++j )
27 const int ntest = 200;
29 for(
int i=0; i < ntest; ++i )
31 pp[i] =
static_cast<char*
>(pool.
avx_alloc(4000));
32 size_t ip =
reinterpret_cast<size_t>(pp[i]);
34 for(
size_t j=0; j < 4000; ++j )
37 for(
int i=0; i < ntest; ++i )
44 CHECK( p1.data() != NULL && p1.data() == p1.ptr0() );
45 for(
int i=0; i < 100; ++i )
47 CHECK_THROW(( p1[-1] = 1. ),out_of_range);
48 CHECK_THROW(( p1[100] = 1. ),out_of_range);
50 CHECK( p2.data() == NULL );
52 CHECK( p3.data() == NULL );
54 CHECK( p4.data() != NULL && p4.data() == p4.ptr0()-10 );
55 for(
int i=-10; i < 100; ++i )
57 CHECK_THROW(( p4[-11] = 1. ),out_of_range);
58 CHECK_THROW(( p1[100] = 1. ),out_of_range);
60 CHECK( p5.data() == NULL );
62 CHECK( p6.data() == NULL );
65 TEST(TestAllocatorAvx)
70 for(
int i=0; i < 2048; ++i )
73 vector< int, allocator_avx<int> > a(sz);
74 size_t ip =
reinterpret_cast<size_t>(
get_ptr(a));
76 for(
size_t j=0; j < sz; ++j )
86 for(
int i=0; i < 2048; ++i )
90 size_t ip =
reinterpret_cast<size_t>(a);
92 for(
size_t j=0; j < sz; ++j )
101 for(
int i=0; i < 32; ++i )
103 for(
int ilo=0; ilo < 32; ilo++ )
105 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
107 double val =
reduce_a( a, ilo, ihi );
108 double expect = double(ihi*(ihi-1)/2 - ilo*(ilo-1)/2);
117 for(
int i=0; i < 32; ++i )
119 for(
int ilo=0; ilo < 32; ilo++ )
121 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
133 for(
int i=0; i < 32; ++i )
138 for(
int ilo=0; ilo < 32; ilo++ )
140 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
142 double val =
reduce_ab( a, b, ilo, ihi );
143 double expect = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
153 for(
int i=0; i < 32; ++i )
158 for(
int ilo=0; ilo < 32; ilo++ )
160 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
162 double val =
reduce_ab( a, b, ilo, ihi );
163 double expect = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
172 for(
int i=0; i < 32; ++i )
177 for(
int ilo=0; ilo < 32; ilo++ )
179 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
190 double a[32], b[32], c[32];
191 for(
int i=0; i < 32; ++i )
197 for(
int ilo=0; ilo < 32; ilo++ )
199 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
202 double expect = double(
pow2(ihi*(ihi-1)/2) -
pow2(ilo*(ilo-1)/2));
208 TEST(TestReduceABCddf)
212 for(
int i=0; i < 32; ++i )
218 for(
int ilo=0; ilo < 32; ilo++ )
220 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
223 double expect = double(
pow2(ihi*(ihi-1)/2) -
pow2(ilo*(ilo-1)/2));
229 TEST(TestReduceABCdff)
233 for(
int i=0; i < 32; ++i )
239 for(
int ilo=0; ilo < 32; ilo++ )
241 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
244 double expect = double(
pow2(ihi*(ihi-1)/2) -
pow2(ilo*(ilo-1)/2));
253 for(
int i=0; i < 32; ++i )
259 for(
int ilo=0; ilo < 32; ilo++ )
261 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
270 TEST(TestReduceAB_Ad)
273 for(
int i=0; i < 32; ++i )
278 for(
int ilo=0; ilo < 32; ilo++ )
280 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
282 double val2, val =
reduce_ab_a( a, b, ilo, ihi, &val2 );
283 double expect = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
284 double expect2 = double(ihi*(ihi-1)/2 - ilo*(ilo-1)/2);
291 TEST(TestReduceAB_Adf)
295 for(
int i=0; i < 32; ++i )
300 for(
int ilo=0; ilo < 32; ilo++ )
302 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
304 double val2, val =
reduce_ab_a( a, b, ilo, ihi, &val2 );
305 double expect = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
306 double expect2 = double(ihi*(ihi-1)/2 - ilo*(ilo-1)/2);
316 TEST(TestReduceAB_Af)
319 for(
int i=0; i < 32; ++i )
324 for(
int ilo=0; ilo < 32; ilo++ )
326 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
328 double val2, val =
reduce_ab_a( a, b, ilo, ihi, &val2 );
329 double expect = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
330 double expect2 = double(ihi*(ihi-1)/2 - ilo*(ilo-1)/2);
337 TEST(TestReduceABC_ABd)
339 double a[32], b[32], c[32];
340 for(
int i=0; i < 32; ++i )
346 for(
int ilo=0; ilo < 32; ilo++ )
348 for(
int ihi=ilo+1; ihi <= 32; ihi++ )
350 double val2, val =
reduce_abc_ab( a, b, c, ilo, ihi, &val2 );
351 double expect = double(
pow2(ihi*(ihi-1)/2) -
pow2(ilo*(ilo-1)/2));
352 double expect2 = double(ihi*(ihi-1)*(2*ihi-1)/6 - ilo*(ilo-1)*(2*ilo-1)/6);
362 double maxarg = log10(DBL_MAX);
364 for(
int i=0; i < 2048; ++i )
369 double val1 =
exp10(arg);
370 double val2 =
pow(10.,arg);
373 CHECK(
fp_equal( val1, val2, 10 ) );
383 for(
int i=0; i < 2048; ++i )
401 double minarg = log(DBL_MIN);
404 double a1 = nextafter(minarg,-DBL_MAX);
405 vexp(val,a1,a1,a1,a1);
406 CHECK( val[0] == 0. );
407 double a2 = nextafter(minarg,DBL_MAX);
408 vexp(val,a2,a2,a2,a2);
409 CHECK( val[0] > 0. );
411 double maxarg = log(DBL_MAX);
412 a1 = nextafter(maxarg,-DBL_MAX);
413 vexp(val,a1,a1,a1,a1);
414 CHECK( val[0] < DBL_MAX );
415 a2 = nextafter(maxarg,DBL_MAX);
416 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
417 a2 = -numeric_limits<double>().infinity();
418 vexp(val,a2,a2,a2,a2);
419 CHECK( val[0] == 0. );
420 a2 = numeric_limits<double>().infinity();
421 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
422 a2 = numeric_limits<double>().quiet_NaN();
423 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
426 for(
int i=0; i < sz; )
432 vexp( arg, val, 0, sz );
433 for(
int i=0; i < sz; ++i )
435 if( arg[i] < minarg )
436 CHECK( val[i] == 0. );
438 CHECK(
fp_equal( val[i], exp(arg[i]) ) );
441 for(
int i=0; i < 32; ++i )
444 for(
int i=0; i < 32; ++i )
446 for(
int j=i+1; j <= 32; ++j )
449 vexp( arg, val, i, j );
450 for(
int k=0; k < 32; ++k )
452 if( k < i || k >= j )
453 CHECK(
isnan(val[k]) );
455 CHECK(
fp_equal( val[k], exp(arg[k]) ) );
458 vexp( &arg[i], val, 0, j-i );
459 for(
int k=0; k < 32; ++k )
462 CHECK(
isnan(val[k]) );
464 CHECK(
fp_equal( val[k], exp(arg[k+i]) ) );
477 double minarg = log10(DBL_MIN);
478 double a1 = nextafter(minarg,-DBL_MAX);
480 CHECK( val[0] == 0. );
481 double a2 = nextafter(minarg,DBL_MAX);
483 CHECK( val[0] > 0. );
484 double maxarg = log10(DBL_MAX);
485 a1 = nextafter(maxarg,-DBL_MAX);
487 CHECK( val[0] < DBL_MAX );
488 a2 = nextafter(maxarg,DBL_MAX);
489 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
490 a2 = -numeric_limits<
double>().infinity();
492 CHECK( val[0] == 0. );
493 a2 = numeric_limits<
double>().infinity();
494 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
495 a2 = numeric_limits<
double>().quiet_NaN();
496 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
498 for(
int i=0; i < sz; )
504 vexp10( arg, val, 0, sz );
505 for(
int i=0; i < sz; ++i )
507 if( arg[i] < minarg )
508 CHECK( val[i] == 0. );
524 double maxarg = log(DBL_MAX);
525 double a1 = nextafter(maxarg,-DBL_MAX);
527 CHECK( val[0] < DBL_MAX );
528 double a2 = nextafter(maxarg,DBL_MAX);
529 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
530 a2 = -numeric_limits<
double>().infinity();
532 CHECK( val[0] == -1. );
533 a2 = numeric_limits<
double>().infinity();
534 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
535 a2 = numeric_limits<
double>().quiet_NaN();
536 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
538 vexpm1( y, 1.e-10, 8.e-8, 4.e-5, 6.e-3, 2.e-1, 1., 1., 1. );
540 CHECK(
fp_equal( y[0], 1.000000000050000e-10 ) );
541 CHECK(
fp_equal( y[1], 8.00000032000000853e-8 ) );
542 CHECK(
fp_equal( y[2], 4.00008000106667733342e-5 ) );
543 CHECK(
fp_equal( y[3], 6.0180360540648648555845e-3 ) );
544 CHECK(
fp_equal( y[4], 2.214027581601698339210720e-1 ) );
545 CHECK(
fp_equal( y[5], 1.7182818284590452353602875 ) );
547 for(
int i=0; i < sz; )
553 vexpm1( arg, val, 0, sz );
554 for(
int i=0; i < sz; ++i )
555 CHECK(
fp_equal( val[i], expm1(arg[i]) ) );
568 sys_float a1 = nextafterf(minarg,-FLT_MAX);
569 vexp(val,a1,a1,a1,a1);
570 CHECK( val[0] == 0.f );
571 sys_float a2 = nextafterf(minarg,FLT_MAX);
572 vexp(val,a2,a2,a2,a2);
573 CHECK( val[0] > 0.f );
575 a1 = nextafterf(maxarg,-FLT_MAX);
576 vexp(val,a1,a1,a1,a1);
577 CHECK( val[0] < FLT_MAX );
578 a2 = nextafterf(maxarg,FLT_MAX);
579 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
580 a2 = -numeric_limits<sys_float>().infinity();
581 vexp(val,a2,a2,a2,a2);
582 CHECK( val[0] == 0.f );
583 a2 = numeric_limits<sys_float>().infinity();
584 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
585 a2 = numeric_limits<sys_float>().quiet_NaN();
586 CHECK_THROW(
vexp(val,a2,a2,a2,a2), domain_error );
588 for(
int i=0; i < sz; )
594 vexp( arg, val, 0, sz );
595 for(
int i=0; i < sz; ++i )
597 if( arg[i] < minarg )
598 CHECK( val[i] == 0.f );
600 CHECK(
fp_equal( val[i], expf(arg[i]) ) );
603 for(
int i=0; i < 32; ++i )
605 for(
int i=0; i < 32; ++i )
607 for(
int j=i+1; j <= 32; ++j )
610 vexp( arg, val, i, j );
611 for(
int k=0; k < 32; ++k )
613 if( k < i || k >= j )
614 CHECK(
isnan(val[k]) );
616 CHECK(
fp_equal( val[k], expf(arg[k]) ) );
619 vexp( &arg[i], val, 0, j-i );
620 for(
int k=0; k < 32; ++k )
623 CHECK(
isnan(val[k]) );
625 CHECK(
fp_equal( val[k], expf(arg[k+i]) ) );
639 sys_float a1 = nextafterf(minarg,-FLT_MAX);
641 CHECK( val[0] == 0.f );
642 sys_float a2 = nextafterf(minarg,FLT_MAX);
644 CHECK( val[0] > 0.f );
646 a1 = nextafterf(maxarg,-FLT_MAX);
648 CHECK( val[0] < FLT_MAX );
649 a2 = nextafterf(maxarg,FLT_MAX);
650 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
651 a2 = -numeric_limits<
sys_float>().infinity();
653 CHECK( val[0] == 0.f );
654 a2 = numeric_limits<
sys_float>().infinity();
655 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
656 a2 = numeric_limits<
sys_float>().quiet_NaN();
657 CHECK_THROW(
vexp10(val,a2,a2,a2,a2), domain_error );
659 for(
int i=0; i < sz; )
665 vexp10( arg, val, 0, sz );
666 for(
int i=0; i < sz; ++i )
668 if( arg[i] < minarg )
669 CHECK( val[i] == 0.f );
671 CHECK(
fp_equal( val[i], powf(10.f,arg[i]), 8 ) );
686 sys_float a1 = nextafterf(maxarg,-FLT_MAX);
688 CHECK( val[0] < FLT_MAX );
689 sys_float a2 = nextafterf(maxarg,FLT_MAX);
690 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
691 a2 = -numeric_limits<
sys_float>().infinity();
693 CHECK( val[0] == -1.f );
694 a2 = numeric_limits<
sys_float>().infinity();
695 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
696 a2 = numeric_limits<
sys_float>().quiet_NaN();
697 CHECK_THROW(
vexpm1(val,a2,a2,a2,a2), domain_error );
699 vexpm1( y, 1.e-10f, 8.e-8f, 4.e-5f, 6.e-3f, 2.e-1f, 1.f, 1.f, 1.f );
701 CHECK(
fp_equal( y[0], 1.000000000050000e-10f ) );
702 CHECK(
fp_equal( y[1], 8.00000032000000853e-8f ) );
703 CHECK(
fp_equal( y[2], 4.00008000106667733342e-5f ) );
704 CHECK(
fp_equal( y[3], 6.0180360540648648555845e-3f ) );
705 CHECK(
fp_equal( y[4], 2.214027581601698339210720e-1f ) );
706 CHECK(
fp_equal( y[5], 1.7182818284590452353602875f ) );
708 for(
int i=0; i < sz; )
714 vexpm1( arg, val, 0, sz );
715 for(
int i=0; i < sz; ++i )
716 CHECK(
fp_equal( val[i], expm1f(arg[i]) ) );
725 vexp(y,1.1,1.2,1.3,1.4);
726 CHECK(
fp_equal( y[0], exp(1.1) ) );
727 CHECK(
fp_equal( y[1], exp(1.2) ) );
728 CHECK(
fp_equal( y[2], exp(1.3) ) );
729 CHECK(
fp_equal( y[3], exp(1.4) ) );
735 vexp10(y,1.1,1.2,1.3,1.4);
745 vexpm1(y,1.e-10,1.2,1.3,1.4);
746 CHECK(
fp_equal( y[0], expm1(1.e-10) ) );
747 CHECK(
fp_equal( y[1], expm1(1.2) ) );
748 CHECK(
fp_equal( y[2], expm1(1.3) ) );
749 CHECK(
fp_equal( y[3], expm1(1.4) ) );
755 vexp(y,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8);
756 CHECK(
fp_equal( y[0], exp(1.1) ) );
757 CHECK(
fp_equal( y[1], exp(1.2) ) );
758 CHECK(
fp_equal( y[2], exp(1.3) ) );
759 CHECK(
fp_equal( y[3], exp(1.4) ) );
760 CHECK(
fp_equal( y[4], exp(1.5) ) );
761 CHECK(
fp_equal( y[5], exp(1.6) ) );
762 CHECK(
fp_equal( y[6], exp(1.7) ) );
763 CHECK(
fp_equal( y[7], exp(1.8) ) );
769 vexp10(y,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8);
783 vexpm1(y,1.e-10,1.2,1.3,1.4,1.5,1.6,1.7,1.8);
784 CHECK(
fp_equal( y[0], expm1(1.e-10) ) );
785 CHECK(
fp_equal( y[1], expm1(1.2) ) );
786 CHECK(
fp_equal( y[2], expm1(1.3) ) );
787 CHECK(
fp_equal( y[3], expm1(1.4) ) );
788 CHECK(
fp_equal( y[4], expm1(1.5) ) );
789 CHECK(
fp_equal( y[5], expm1(1.6) ) );
790 CHECK(
fp_equal( y[6], expm1(1.7) ) );
791 CHECK(
fp_equal( y[7], expm1(1.8) ) );
797 vexp(y,1.1f,1.2f,1.3f,1.4f);
798 CHECK(
fp_equal( y[0], expf(1.1f) ) );
799 CHECK(
fp_equal( y[1], expf(1.2f) ) );
800 CHECK(
fp_equal( y[2], expf(1.3f) ) );
801 CHECK(
fp_equal( y[3], expf(1.4f) ) );
807 vexp10(y,1.1f,1.2f,1.3f,1.4f);
808 CHECK(
fp_equal( y[0], powf(10.f,1.1f) ) );
809 CHECK(
fp_equal( y[1], powf(10.f,1.2f) ) );
810 CHECK(
fp_equal( y[2], powf(10.f,1.3f) ) );
811 CHECK(
fp_equal( y[3], powf(10.f,1.4f) ) );
817 vexpm1(y,1.e-10f,1.2f,1.3f,1.4f);
818 CHECK(
fp_equal( y[0], expm1f(1.e-10f) ) );
819 CHECK(
fp_equal( y[1], expm1f(1.2f) ) );
820 CHECK(
fp_equal( y[2], expm1f(1.3f) ) );
821 CHECK(
fp_equal( y[3], expm1f(1.4f) ) );
827 vexp(y,1.1f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f);
828 CHECK(
fp_equal( y[0], expf(1.1f) ) );
829 CHECK(
fp_equal( y[1], expf(1.2f) ) );
830 CHECK(
fp_equal( y[2], expf(1.3f) ) );
831 CHECK(
fp_equal( y[3], expf(1.4f) ) );
832 CHECK(
fp_equal( y[4], expf(1.5f) ) );
833 CHECK(
fp_equal( y[5], expf(1.6f) ) );
834 CHECK(
fp_equal( y[6], expf(1.7f) ) );
835 CHECK(
fp_equal( y[7], expf(1.8f) ) );
841 vexp10(y,1.1f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f);
842 CHECK(
fp_equal( y[0], powf(10.f,1.1f) ) );
843 CHECK(
fp_equal( y[1], powf(10.f,1.2f) ) );
844 CHECK(
fp_equal( y[2], powf(10.f,1.3f) ) );
845 CHECK(
fp_equal( y[3], powf(10.f,1.4f) ) );
846 CHECK(
fp_equal( y[4], powf(10.f,1.5f) ) );
847 CHECK(
fp_equal( y[5], powf(10.f,1.6f) ) );
848 CHECK(
fp_equal( y[6], powf(10.f,1.7f) ) );
849 CHECK(
fp_equal( y[7], powf(10.f,1.8f) ) );
855 vexpm1(y,1.e-10f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f);
856 CHECK(
fp_equal( y[0], expm1f(1.e-10f) ) );
857 CHECK(
fp_equal( y[1], expm1f(1.2f) ) );
858 CHECK(
fp_equal( y[2], expm1f(1.3f) ) );
859 CHECK(
fp_equal( y[3], expm1f(1.4f) ) );
860 CHECK(
fp_equal( y[4], expm1f(1.5f) ) );
861 CHECK(
fp_equal( y[5], expm1f(1.6f) ) );
862 CHECK(
fp_equal( y[6], expm1f(1.7f) ) );
863 CHECK(
fp_equal( y[7], expm1f(1.8f) ) );
869 vexp(y,1.1f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f,2.11f,2.22f,2.33f,2.44f,2.55f,2.66f,2.77f,2.88f);
870 CHECK(
fp_equal( y[0], expf(1.1f) ) );
871 CHECK(
fp_equal( y[1], expf(1.2f) ) );
872 CHECK(
fp_equal( y[2], expf(1.3f) ) );
873 CHECK(
fp_equal( y[3], expf(1.4f) ) );
874 CHECK(
fp_equal( y[4], expf(1.5f) ) );
875 CHECK(
fp_equal( y[5], expf(1.6f) ) );
876 CHECK(
fp_equal( y[6], expf(1.7f) ) );
877 CHECK(
fp_equal( y[7], expf(1.8f) ) );
878 CHECK(
fp_equal( y[8], expf(2.11f) ) );
879 CHECK(
fp_equal( y[9], expf(2.22f) ) );
880 CHECK(
fp_equal( y[10], expf(2.33f) ) );
881 CHECK(
fp_equal( y[11], expf(2.44f) ) );
882 CHECK(
fp_equal( y[12], expf(2.55f) ) );
883 CHECK(
fp_equal( y[13], expf(2.66f) ) );
884 CHECK(
fp_equal( y[14], expf(2.77f) ) );
885 CHECK(
fp_equal( y[15], expf(2.88f) ) );
891 vexp10(y,1.1f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f,2.11f,2.22f,2.33f,2.44f,2.55f,2.66f,2.77f,2.88f);
892 CHECK(
fp_equal( y[0], powf(10.f,1.1f) ) );
893 CHECK(
fp_equal( y[1], powf(10.f,1.2f) ) );
894 CHECK(
fp_equal( y[2], powf(10.f,1.3f) ) );
895 CHECK(
fp_equal( y[3], powf(10.f,1.4f) ) );
896 CHECK(
fp_equal( y[4], powf(10.f,1.5f) ) );
897 CHECK(
fp_equal( y[5], powf(10.f,1.6f) ) );
898 CHECK(
fp_equal( y[6], powf(10.f,1.7f) ) );
899 CHECK(
fp_equal( y[7], powf(10.f,1.8f) ) );
900 CHECK(
fp_equal( y[8], powf(10.f,2.11f) ) );
901 CHECK(
fp_equal( y[9], powf(10.f,2.22f) ) );
902 CHECK(
fp_equal( y[10], powf(10.f,2.33f) ) );
903 CHECK(
fp_equal( y[11], powf(10.f,2.44f) ) );
904 CHECK(
fp_equal( y[12], powf(10.f,2.55f) ) );
905 CHECK(
fp_equal( y[13], powf(10.f,2.66f) ) );
906 CHECK(
fp_equal( y[14], powf(10.f,2.77f) ) );
907 CHECK(
fp_equal( y[15], powf(10.f,2.88f) ) );
913 vexpm1(y,1.e-10f,1.2f,1.3f,1.4f,1.5f,1.6f,1.7f,1.8f,2.11f,2.22f,2.33f,2.44f,2.55f,2.66f,2.77f,2.88f);
914 CHECK(
fp_equal( y[0], expm1f(1.e-10f) ) );
915 CHECK(
fp_equal( y[1], expm1f(1.2f) ) );
916 CHECK(
fp_equal( y[2], expm1f(1.3f) ) );
917 CHECK(
fp_equal( y[3], expm1f(1.4f) ) );
918 CHECK(
fp_equal( y[4], expm1f(1.5f) ) );
919 CHECK(
fp_equal( y[5], expm1f(1.6f) ) );
920 CHECK(
fp_equal( y[6], expm1f(1.7f) ) );
921 CHECK(
fp_equal( y[7], expm1f(1.8f) ) );
922 CHECK(
fp_equal( y[8], expm1f(2.11f) ) );
923 CHECK(
fp_equal( y[9], expm1f(2.22f) ) );
924 CHECK(
fp_equal( y[10], expm1f(2.33f) ) );
925 CHECK(
fp_equal( y[11], expm1f(2.44f) ) );
926 CHECK(
fp_equal( y[12], expm1f(2.55f) ) );
927 CHECK(
fp_equal( y[13], expm1f(2.66f) ) );
928 CHECK(
fp_equal( y[14], expm1f(2.77f) ) );
929 CHECK(
fp_equal( y[15], expm1f(2.88f) ) );
937 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
939 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
941 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
942 x = numeric_limits<double>().infinity();
943 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
944 x = -numeric_limits<double>().infinity();
945 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
946 x = numeric_limits<double>().quiet_NaN();
947 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
953 for(
int i=0; i < sz; ++i )
955 vlog( arg, val, 0, sz );
956 for(
int i=0; i < sz; ++i )
957 CHECK(
fp_equal( val[i], log(arg[i]) ) );
968 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
970 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
972 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
973 x = numeric_limits<double>().infinity();
974 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
975 x = -numeric_limits<double>().infinity();
976 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
977 x = numeric_limits<double>().quiet_NaN();
978 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
984 for(
int i=0; i < sz; ++i )
985 arg[i] = exp(genrand_real1()*1418.17-708.39);
986 vlog10( arg, val, 0, sz );
987 for(
int i=0; i < sz; ++i )
988 CHECK(
fp_equal( val[i], log10(arg[i]) ) );
999 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1001 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1002 x = numeric_limits<double>().infinity();
1003 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1004 x = -numeric_limits<double>().infinity();
1005 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1006 x = numeric_limits<double>().quiet_NaN();
1007 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1009 const int sz = 2048;
1014 for(
int i=0; i < sz; ++i )
1020 vlog1p( arg, val, 0, sz );
1021 for(
int i=0; i < sz; ++i )
1022 CHECK(
fp_equal( val[i], log1p(arg[i]) ) );
1024 for(
int i=0; i < sz; ++i )
1025 arg[i] = exp(
genrand_real1()*1418.17-708.39) - 0.9999999999;
1026 vlog1p( arg, val, 0, sz );
1027 for(
int i=0; i < sz; ++i )
1028 CHECK(
fp_equal( val[i], log1p(arg[i]) ) );
1039 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1041 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1043 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1044 x = numeric_limits<sys_float>().infinity();
1045 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1046 x = -numeric_limits<sys_float>().infinity();
1047 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1048 x = numeric_limits<sys_float>().quiet_NaN();
1049 CHECK_THROW(
vlog(y,x,x,x,x), domain_error );
1051 const int sz = 2048;
1055 for(
int i=0; i < sz; ++i )
1056 arg[i] = exp(genrand_real1()*176.05-87.33);
1057 vlog( arg, val, 0, sz );
1058 for(
int i=0; i < sz; ++i )
1059 CHECK(
fp_equal( val[i], logf(arg[i]) ) );
1070 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1072 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1074 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1075 x = numeric_limits<sys_float>().infinity();
1076 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1077 x = -numeric_limits<sys_float>().infinity();
1078 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1079 x = numeric_limits<sys_float>().quiet_NaN();
1080 CHECK_THROW(
vlog10(y,x,x,x,x), domain_error );
1082 const int sz = 2048;
1086 for(
int i=0; i < sz; ++i )
1087 arg[i] = exp(genrand_real1()*176.05-87.33);
1088 vlog10( arg, val, 0, sz );
1089 for(
int i=0; i < sz; ++i )
1090 CHECK(
fp_equal( val[i], log10f(arg[i]) ) );
1101 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1103 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1104 x = numeric_limits<sys_float>().infinity();
1105 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1106 x = -numeric_limits<sys_float>().infinity();
1107 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1108 x = numeric_limits<sys_float>().quiet_NaN();
1109 CHECK_THROW(
vlog1p(y,x,x,x,x), domain_error );
1111 const int sz = 2048;
1116 for(
int i=0; i < sz; ++i )
1122 vlog1p( arg, val, 0, sz );
1123 for(
int i=0; i < sz; ++i )
1124 CHECK(
fp_equal( val[i], log1pf(arg[i]) ) );
1126 for(
int i=0; i < sz; ++i )
1128 vlog1p( arg, val, 0, sz );
1129 for(
int i=0; i < sz; ++i )
1130 CHECK(
fp_equal( val[i], log1pf(arg[i]) ) );
1139 vlog(y,11.,22.,33.,44.);
1140 CHECK(
fp_equal( y[0], log(11.) ) );
1141 CHECK(
fp_equal( y[1], log(22.) ) );
1142 CHECK(
fp_equal( y[2], log(33.) ) );
1143 CHECK(
fp_equal( y[3], log(44.) ) );
1149 vlog10(y,11.,22.,33.,44.);
1150 CHECK(
fp_equal( y[0], log10(11.) ) );
1151 CHECK(
fp_equal( y[1], log10(22.) ) );
1152 CHECK(
fp_equal( y[2], log10(33.) ) );
1153 CHECK(
fp_equal( y[3], log10(44.) ) );
1159 vlog1p(y,11.,22.,33.,44.);
1160 CHECK(
fp_equal( y[0], log1p(11.) ) );
1161 CHECK(
fp_equal( y[1], log1p(22.) ) );
1162 CHECK(
fp_equal( y[2], log1p(33.) ) );
1163 CHECK(
fp_equal( y[3], log1p(44.) ) );
1169 vlog(y,11.,22.,33.,44.,55.,66.,77.,88.);
1170 CHECK(
fp_equal( y[0], log(11.) ) );
1171 CHECK(
fp_equal( y[1], log(22.) ) );
1172 CHECK(
fp_equal( y[2], log(33.) ) );
1173 CHECK(
fp_equal( y[3], log(44.) ) );
1174 CHECK(
fp_equal( y[4], log(55.) ) );
1175 CHECK(
fp_equal( y[5], log(66.) ) );
1176 CHECK(
fp_equal( y[6], log(77.) ) );
1177 CHECK(
fp_equal( y[7], log(88.) ) );
1183 vlog10(y,11.,22.,33.,44.,55.,66.,77.,88.);
1184 CHECK(
fp_equal( y[0], log10(11.) ) );
1185 CHECK(
fp_equal( y[1], log10(22.) ) );
1186 CHECK(
fp_equal( y[2], log10(33.) ) );
1187 CHECK(
fp_equal( y[3], log10(44.) ) );
1188 CHECK(
fp_equal( y[4], log10(55.) ) );
1189 CHECK(
fp_equal( y[5], log10(66.) ) );
1190 CHECK(
fp_equal( y[6], log10(77.) ) );
1191 CHECK(
fp_equal( y[7], log10(88.) ) );
1197 vlog1p(y,11.,22.,33.,44.,55.,66.,77.,88.);
1198 CHECK(
fp_equal( y[0], log1p(11.) ) );
1199 CHECK(
fp_equal( y[1], log1p(22.) ) );
1200 CHECK(
fp_equal( y[2], log1p(33.) ) );
1201 CHECK(
fp_equal( y[3], log1p(44.) ) );
1202 CHECK(
fp_equal( y[4], log1p(55.) ) );
1203 CHECK(
fp_equal( y[5], log1p(66.) ) );
1204 CHECK(
fp_equal( y[6], log1p(77.) ) );
1205 CHECK(
fp_equal( y[7], log1p(88.) ) );
1211 vlog(y,11.f,22.f,33.f,44.f);
1212 CHECK(
fp_equal( y[0], logf(11.f) ) );
1213 CHECK(
fp_equal( y[1], logf(22.f) ) );
1214 CHECK(
fp_equal( y[2], logf(33.f) ) );
1215 CHECK(
fp_equal( y[3], logf(44.f) ) );
1221 vlog10(y,11.f,22.f,33.f,44.f);
1222 CHECK(
fp_equal( y[0], log10f(11.f) ) );
1223 CHECK(
fp_equal( y[1], log10f(22.f) ) );
1224 CHECK(
fp_equal( y[2], log10f(33.f) ) );
1225 CHECK(
fp_equal( y[3], log10f(44.f) ) );
1231 vlog1p(y,11.f,22.f,33.f,44.f);
1232 CHECK(
fp_equal( y[0], log1pf(11.f) ) );
1233 CHECK(
fp_equal( y[1], log1pf(22.f) ) );
1234 CHECK(
fp_equal( y[2], log1pf(33.f) ) );
1235 CHECK(
fp_equal( y[3], log1pf(44.f) ) );
1241 vlog(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1242 CHECK(
fp_equal( y[0], logf(11.f) ) );
1243 CHECK(
fp_equal( y[1], logf(22.f) ) );
1244 CHECK(
fp_equal( y[2], logf(33.f) ) );
1245 CHECK(
fp_equal( y[3], logf(44.f) ) );
1246 CHECK(
fp_equal( y[4], logf(55.f) ) );
1247 CHECK(
fp_equal( y[5], logf(66.f) ) );
1248 CHECK(
fp_equal( y[6], logf(77.f) ) );
1249 CHECK(
fp_equal( y[7], logf(88.f) ) );
1255 vlog10(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1256 CHECK(
fp_equal( y[0], log10f(11.f) ) );
1257 CHECK(
fp_equal( y[1], log10f(22.f) ) );
1258 CHECK(
fp_equal( y[2], log10f(33.f) ) );
1259 CHECK(
fp_equal( y[3], log10f(44.f) ) );
1260 CHECK(
fp_equal( y[4], log10f(55.f) ) );
1261 CHECK(
fp_equal( y[5], log10f(66.f) ) );
1262 CHECK(
fp_equal( y[6], log10f(77.f) ) );
1263 CHECK(
fp_equal( y[7], log10f(88.f) ) );
1269 vlog1p(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1270 CHECK(
fp_equal( y[0], log1pf(11.f) ) );
1271 CHECK(
fp_equal( y[1], log1pf(22.f) ) );
1272 CHECK(
fp_equal( y[2], log1pf(33.f) ) );
1273 CHECK(
fp_equal( y[3], log1pf(44.f) ) );
1274 CHECK(
fp_equal( y[4], log1pf(55.f) ) );
1275 CHECK(
fp_equal( y[5], log1pf(66.f) ) );
1276 CHECK(
fp_equal( y[6], log1pf(77.f) ) );
1277 CHECK(
fp_equal( y[7], log1pf(88.f) ) );
1283 vlog(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1284 CHECK(
fp_equal( y[0], logf(11.f) ) );
1285 CHECK(
fp_equal( y[1], logf(22.f) ) );
1286 CHECK(
fp_equal( y[2], logf(33.f) ) );
1287 CHECK(
fp_equal( y[3], logf(44.f) ) );
1288 CHECK(
fp_equal( y[4], logf(55.f) ) );
1289 CHECK(
fp_equal( y[5], logf(66.f) ) );
1290 CHECK(
fp_equal( y[6], logf(77.f) ) );
1291 CHECK(
fp_equal( y[7], logf(88.f) ) );
1292 CHECK(
fp_equal( y[8], logf(111.f) ) );
1293 CHECK(
fp_equal( y[9], logf(122.f) ) );
1294 CHECK(
fp_equal( y[10], logf(133.f) ) );
1295 CHECK(
fp_equal( y[11], logf(144.f) ) );
1296 CHECK(
fp_equal( y[12], logf(155.f) ) );
1297 CHECK(
fp_equal( y[13], logf(166.f) ) );
1298 CHECK(
fp_equal( y[14], logf(177.f) ) );
1299 CHECK(
fp_equal( y[15], logf(188.f) ) );
1302 TEST(TestVlog10fx16)
1305 vlog10(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1306 CHECK(
fp_equal( y[0], log10f(11.f) ) );
1307 CHECK(
fp_equal( y[1], log10f(22.f) ) );
1308 CHECK(
fp_equal( y[2], log10f(33.f) ) );
1309 CHECK(
fp_equal( y[3], log10f(44.f) ) );
1310 CHECK(
fp_equal( y[4], log10f(55.f) ) );
1311 CHECK(
fp_equal( y[5], log10f(66.f) ) );
1312 CHECK(
fp_equal( y[6], log10f(77.f) ) );
1313 CHECK(
fp_equal( y[7], log10f(88.f) ) );
1314 CHECK(
fp_equal( y[8], log10f(111.f) ) );
1315 CHECK(
fp_equal( y[9], log10f(122.f) ) );
1316 CHECK(
fp_equal( y[10], log10f(133.f) ) );
1317 CHECK(
fp_equal( y[11], log10f(144.f) ) );
1318 CHECK(
fp_equal( y[12], log10f(155.f) ) );
1319 CHECK(
fp_equal( y[13], log10f(166.f) ) );
1320 CHECK(
fp_equal( y[14], log10f(177.f) ) );
1321 CHECK(
fp_equal( y[15], log10f(188.f) ) );
1324 TEST(TestVlog1pfx16)
1327 vlog1p(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1328 CHECK(
fp_equal( y[0], log1pf(11.f) ) );
1329 CHECK(
fp_equal( y[1], log1pf(22.f) ) );
1330 CHECK(
fp_equal( y[2], log1pf(33.f) ) );
1331 CHECK(
fp_equal( y[3], log1pf(44.f) ) );
1332 CHECK(
fp_equal( y[4], log1pf(55.f) ) );
1333 CHECK(
fp_equal( y[5], log1pf(66.f) ) );
1334 CHECK(
fp_equal( y[6], log1pf(77.f) ) );
1335 CHECK(
fp_equal( y[7], log1pf(88.f) ) );
1336 CHECK(
fp_equal( y[8], log1pf(111.f) ) );
1337 CHECK(
fp_equal( y[9], log1pf(122.f) ) );
1338 CHECK(
fp_equal( y[10], log1pf(133.f) ) );
1339 CHECK(
fp_equal( y[11], log1pf(144.f) ) );
1340 CHECK(
fp_equal( y[12], log1pf(155.f) ) );
1341 CHECK(
fp_equal( y[13], log1pf(166.f) ) );
1342 CHECK(
fp_equal( y[14], log1pf(177.f) ) );
1343 CHECK(
fp_equal( y[15], log1pf(188.f) ) );
1351 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1352 x = -numeric_limits<double>().infinity();
1353 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1354 x = numeric_limits<double>().infinity();
1355 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1356 x = numeric_limits<double>().quiet_NaN();
1357 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1360 CHECK( y[0] == 0. );
1362 const int sz = 2048;
1366 for(
int i=0; i < sz; ++i )
1367 arg[i] = exp(genrand_real1()*1418.17-708.39);
1368 vsqrt( arg, val, 0, sz );
1369 for(
int i=0; i < sz; ++i )
1370 CHECK(
fp_equal( val[i], sqrt(arg[i]) ) );
1378 const int sz = 2048;
1383 double y[4], x = -numeric_limits<double>().infinity();
1384 CHECK_THROW(
vhypot(y,x,1.,x,1.,x,1.,x,1.), domain_error );
1385 CHECK_THROW(
vhypot(y,1.,x,1.,x,1.,x,1.,x), domain_error );
1386 x = numeric_limits<double>().infinity();
1387 CHECK_THROW(
vhypot(y,x,1.,x,1.,x,1.,x,1.), domain_error );
1388 CHECK_THROW(
vhypot(y,1.,x,1.,x,1.,x,1.,x), domain_error );
1389 x = numeric_limits<double>().quiet_NaN();
1390 CHECK_THROW(
vhypot(y,x,1.,x,1.,x,1.,x,1.), domain_error );
1391 CHECK_THROW(
vhypot(y,1.,x,1.,x,1.,x,1.,x), domain_error );
1392 vhypot(y,0.,0.,1.,0.,0.,1.,DBL_MAX/2.,DBL_MAX/2.);
1396 CHECK(
fp_equal( y[3], DBL_MAX/sqrt(2.) ) );
1399 for(
int i=0; i < sz; ++i )
1408 vhypot( arg1, arg2, val, 0, sz );
1409 for(
int i=0; i < sz; ++i )
1411 CHECK(
fp_equal( val[i], hypot(arg1[i], arg2[i]) ) );
1414 for(
int i=0; i < 32; ++i )
1416 arg1[i] = double(i);
1417 arg2[i] = double(i);
1420 for(
int i=0; i < 32; ++i )
1422 for(
int j=i+1; j <= 32; ++j )
1425 vhypot( arg1, arg2, val, i, j );
1426 for(
int k=0; k < 32; ++k )
1428 if( k < i || k >= j )
1429 CHECK(
isnan(val[k]) );
1431 CHECK(
fp_equal( val[k],
double(k)*sqrt(2.) ) );
1434 vhypot( &arg1[i], &arg2[i], val, 0, j-i );
1435 for(
int k=0; k < 32; ++k )
1438 CHECK(
isnan(val[k]) );
1440 CHECK(
fp_equal( val[k],
double(k+i)*sqrt(2.) ) );
1443 vhypot( &arg1[i], arg2, &val[i], 0, j-i );
1444 for(
int k=0; k < 32; ++k )
1446 if( k < i || k >= j )
1447 CHECK(
isnan(val[k]) );
1449 CHECK(
fp_equal( val[k], sqrt(
double((k-i)*(k-i)+k*k)) ) );
1452 vhypot( arg1, &arg2[i], &val[i], 0, j-i );
1453 for(
int k=0; k < 32; ++k )
1455 if( k < i || k >= j )
1456 CHECK(
isnan(val[k]) );
1458 CHECK(
fp_equal( val[k], sqrt(
double((k-i)*(k-i)+k*k)) ) );
1461 vhypot( &arg1[i], &arg2[i/2], val, 0, j-i );
1462 for(
int k=0; k < 32; ++k )
1465 CHECK(
isnan(val[k]) );
1468 double ref2 = double((k+i)*(k+i) + (k+i/2)*(k+i/2));
1469 CHECK(
fp_equal( val[k], sqrt(ref2) ) );
1481 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1482 x = -numeric_limits<sys_float>().infinity();
1483 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1484 x = numeric_limits<sys_float>().infinity();
1485 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1486 x = numeric_limits<sys_float>().quiet_NaN();
1487 CHECK_THROW(
vsqrt(y,x,x,x,x), domain_error );
1490 CHECK( y[0] == 0.f );
1492 const int sz = 2048;
1496 for(
int i=0; i < sz; ++i )
1497 arg[i] = exp(genrand_real1()*176.05-87.33);
1498 vsqrt( arg, val, 0, sz );
1499 for(
int i=0; i < sz; ++i )
1500 CHECK(
fp_equal( val[i], sqrtf(arg[i]) ) );
1508 const int sz = 2048;
1513 sys_float y[4], x = -numeric_limits<sys_float>().infinity();
1514 CHECK_THROW(
vhypot(y,x,1.f,x,1.f,x,1.f,x,1.f), domain_error );
1515 CHECK_THROW(
vhypot(y,1.f,x,1.f,x,1.f,x,1.f,x), domain_error );
1516 x = numeric_limits<sys_float>().infinity();
1517 CHECK_THROW(
vhypot(y,x,1.f,x,1.f,x,1.f,x,1.f), domain_error );
1518 CHECK_THROW(
vhypot(y,1.f,x,1.f,x,1.f,x,1.f,x), domain_error );
1519 x = numeric_limits<sys_float>().quiet_NaN();
1520 CHECK_THROW(
vhypot(y,x,1.f,x,1.f,x,1.f,x,1.f), domain_error );
1521 CHECK_THROW(
vhypot(y,1.f,x,1.f,x,1.f,x,1.f,x), domain_error );
1522 vhypot(y,0.f,0.f,1.f,0.f,0.f,1.f,FLT_MAX/2.f,FLT_MAX/2.f);
1526 CHECK(
fp_equal( y[3], FLT_MAX/sqrtf(2.f) ) );
1529 for(
int i=0; i < sz; ++i )
1538 vhypot( arg1, arg2, val, 0, sz );
1539 for(
int i=0; i < sz; ++i )
1541 CHECK(
fp_equal( val[i], hypotf(arg1[i], arg2[i]) ) );
1544 for(
int i=0; i < 32; ++i )
1550 for(
int i=0; i < 32; ++i )
1552 for(
int j=i+1; j <= 32; ++j )
1555 vhypot( arg1, arg2, val, i, j );
1556 for(
int k=0; k < 32; ++k )
1558 if( k < i || k >= j )
1559 CHECK( isnanf(val[k]) );
1564 vhypot( &arg1[i], &arg2[i], val, 0, j-i );
1565 for(
int k=0; k < 32; ++k )
1568 CHECK( isnanf(val[k]) );
1573 vhypot( &arg1[i], arg2, &val[i], 0, j-i );
1574 for(
int k=0; k < 32; ++k )
1576 if( k < i || k >= j )
1577 CHECK( isnanf(val[k]) );
1582 vhypot( arg1, &arg2[i], &val[i], 0, j-i );
1583 for(
int k=0; k < 32; ++k )
1585 if( k < i || k >= j )
1586 CHECK( isnanf(val[k]) );
1591 vhypot( &arg1[i], &arg2[i/2], val, 0, j-i );
1592 for(
int k=0; k < 32; ++k )
1595 CHECK( isnanf(val[k]) );
1599 CHECK(
fp_equal( val[k], sqrtf(ref2) ) );
1609 vsqrt(y,11.,22.,33.,44.);
1610 CHECK(
fp_equal( y[0], sqrt(11.) ) );
1611 CHECK(
fp_equal( y[1], sqrt(22.) ) );
1612 CHECK(
fp_equal( y[2], sqrt(33.) ) );
1613 CHECK(
fp_equal( y[3], sqrt(44.) ) );
1619 vhypot(y,11.,22.,33.,44.,55.,66.,77.,88.);
1620 CHECK(
fp_equal( y[0], hypot(11.,22.) ) );
1621 CHECK(
fp_equal( y[1], hypot(33.,44.) ) );
1622 CHECK(
fp_equal( y[2], hypot(55.,66.) ) );
1623 CHECK(
fp_equal( y[3], hypot(77.,88.) ) );
1629 vsqrt(y,11.,22.,33.,44.,55.,66.,77.,88.);
1630 CHECK(
fp_equal( y[0], sqrt(11.) ) );
1631 CHECK(
fp_equal( y[1], sqrt(22.) ) );
1632 CHECK(
fp_equal( y[2], sqrt(33.) ) );
1633 CHECK(
fp_equal( y[3], sqrt(44.) ) );
1634 CHECK(
fp_equal( y[4], sqrt(55.) ) );
1635 CHECK(
fp_equal( y[5], sqrt(66.) ) );
1636 CHECK(
fp_equal( y[6], sqrt(77.) ) );
1637 CHECK(
fp_equal( y[7], sqrt(88.) ) );
1643 vsqrt(y,11.f,22.f,33.f,44.f);
1644 CHECK(
fp_equal( y[0], sqrtf(11.f) ) );
1645 CHECK(
fp_equal( y[1], sqrtf(22.f) ) );
1646 CHECK(
fp_equal( y[2], sqrtf(33.f) ) );
1647 CHECK(
fp_equal( y[3], sqrtf(44.f) ) );
1653 vhypot(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1654 CHECK(
fp_equal( y[0], hypotf(11.f,22.f) ) );
1655 CHECK(
fp_equal( y[1], hypotf(33.f,44.f) ) );
1656 CHECK(
fp_equal( y[2], hypotf(55.f,66.f) ) );
1657 CHECK(
fp_equal( y[3], hypotf(77.f,88.f) ) );
1663 vsqrt(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1664 CHECK(
fp_equal( y[0], sqrtf(11.f) ) );
1665 CHECK(
fp_equal( y[1], sqrtf(22.f) ) );
1666 CHECK(
fp_equal( y[2], sqrtf(33.f) ) );
1667 CHECK(
fp_equal( y[3], sqrtf(44.f) ) );
1668 CHECK(
fp_equal( y[4], sqrtf(55.f) ) );
1669 CHECK(
fp_equal( y[5], sqrtf(66.f) ) );
1670 CHECK(
fp_equal( y[6], sqrtf(77.f) ) );
1671 CHECK(
fp_equal( y[7], sqrtf(88.f) ) );
1677 vhypot(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1678 CHECK(
fp_equal( y[0], hypotf(11.f,22.f) ) );
1679 CHECK(
fp_equal( y[1], hypotf(33.f,44.f) ) );
1680 CHECK(
fp_equal( y[2], hypotf(55.f,66.f) ) );
1681 CHECK(
fp_equal( y[3], hypotf(77.f,88.f) ) );
1682 CHECK(
fp_equal( y[4], hypotf(111.f,122.f) ) );
1683 CHECK(
fp_equal( y[5], hypotf(133.f,144.f) ) );
1684 CHECK(
fp_equal( y[6], hypotf(155.f,166.f) ) );
1685 CHECK(
fp_equal( y[7], hypotf(177.f,188.f) ) );
1691 vsqrt(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1692 CHECK(
fp_equal( y[0], sqrtf(11.f) ) );
1693 CHECK(
fp_equal( y[1], sqrtf(22.f) ) );
1694 CHECK(
fp_equal( y[2], sqrtf(33.f) ) );
1695 CHECK(
fp_equal( y[3], sqrtf(44.f) ) );
1696 CHECK(
fp_equal( y[4], sqrtf(55.f) ) );
1697 CHECK(
fp_equal( y[5], sqrtf(66.f) ) );
1698 CHECK(
fp_equal( y[6], sqrtf(77.f) ) );
1699 CHECK(
fp_equal( y[7], sqrtf(88.f) ) );
1700 CHECK(
fp_equal( y[8], sqrtf(111.f) ) );
1701 CHECK(
fp_equal( y[9], sqrtf(122.f) ) );
1702 CHECK(
fp_equal( y[10], sqrtf(133.f) ) );
1703 CHECK(
fp_equal( y[11], sqrtf(144.f) ) );
1704 CHECK(
fp_equal( y[12], sqrtf(155.f) ) );
1705 CHECK(
fp_equal( y[13], sqrtf(166.f) ) );
1706 CHECK(
fp_equal( y[14], sqrtf(177.f) ) );
1707 CHECK(
fp_equal( y[15], sqrtf(188.f) ) );
1714 x = -numeric_limits<double>().infinity();
1715 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1716 x = numeric_limits<double>().infinity();
1717 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1718 x = -numeric_limits<double>().quiet_NaN();
1719 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1722 CHECK( y[0] == 0. );
1724 const int sz = 2048;
1728 for(
int i=0; i < sz; ++i )
1734 vasinh( arg, val, 0, sz );
1735 for(
int i=0; i < sz; ++i )
1736 CHECK(
fp_equal( val[i], asinh(arg[i]) ) );
1742 TEST(TestVasinhdFast)
1746 x = -numeric_limits<double>().infinity();
1747 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1748 x = numeric_limits<double>().infinity();
1749 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1750 x = numeric_limits<double>().quiet_NaN();
1751 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1753 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1754 double z = sqrt(DBL_MAX);
1755 x = nextafter(z,DBL_MAX);
1756 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1757 x = nextafter(z,-DBL_MAX);
1759 CHECK( y[0] > 0. && y[0] < DBL_MAX );
1762 CHECK( y[0] == 0. );
1764 const int sz = 2048;
1768 for(
int i=0; i < sz; ++i )
1769 arg[i] = exp(genrand_real1()*1063.28-708.39);
1771 for(
int i=0; i < sz; ++i )
1772 CHECK(
fp_equal( val[i], asinh(arg[i]) ) );
1782 x = -numeric_limits<sys_float>().infinity();
1783 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1784 x = numeric_limits<sys_float>().infinity();
1785 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1786 x = numeric_limits<sys_float>().quiet_NaN();
1787 CHECK_THROW(
vasinh(y,x,x,x,x), domain_error );
1790 CHECK( y[0] == 0.f );
1792 const int sz = 2048;
1796 for(
int i=0; i < sz; ++i )
1802 vasinh( arg, val, 0, sz );
1803 for(
int i=0; i < sz; ++i )
1804 CHECK(
fp_equal( val[i], asinhf(arg[i]) ) );
1810 TEST(TestVasinhfFast)
1814 x = -numeric_limits<sys_float>().infinity();
1815 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1816 x = numeric_limits<sys_float>().infinity();
1817 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1818 x = numeric_limits<sys_float>().quiet_NaN();
1819 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1821 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1823 x = nextafterf(z,FLT_MAX);
1824 CHECK_THROW(
vfast_asinh(y,x,x,x,x), domain_error );
1825 x = nextafterf(z,-FLT_MAX);
1827 CHECK( y[0] > 0.f && y[0] < FLT_MAX );
1830 CHECK( y[0] == 0.f );
1832 const int sz = 2048;
1836 for(
int i=0; i < sz; ++i )
1837 arg[i] = exp(genrand_real1()*131.69-87.33);
1839 for(
int i=0; i < sz; ++i )
1840 CHECK(
fp_equal( val[i], asinhf(arg[i]) ) );
1849 vasinh(y,11.,22.,33.,44.);
1850 CHECK(
fp_equal( y[0], asinh(11.) ) );
1851 CHECK(
fp_equal( y[1], asinh(22.) ) );
1852 CHECK(
fp_equal( y[2], asinh(33.) ) );
1853 CHECK(
fp_equal( y[3], asinh(44.) ) );
1856 TEST(TestVasinhdFastx4)
1860 CHECK(
fp_equal( y[0], asinh(11.) ) );
1861 CHECK(
fp_equal( y[1], asinh(22.) ) );
1862 CHECK(
fp_equal( y[2], asinh(33.) ) );
1863 CHECK(
fp_equal( y[3], asinh(44.) ) );
1869 vasinh(y,11.,22.,33.,44.,55.,66.,77.,88.);
1870 CHECK(
fp_equal( y[0], asinh(11.) ) );
1871 CHECK(
fp_equal( y[1], asinh(22.) ) );
1872 CHECK(
fp_equal( y[2], asinh(33.) ) );
1873 CHECK(
fp_equal( y[3], asinh(44.) ) );
1874 CHECK(
fp_equal( y[4], asinh(55.) ) );
1875 CHECK(
fp_equal( y[5], asinh(66.) ) );
1876 CHECK(
fp_equal( y[6], asinh(77.) ) );
1877 CHECK(
fp_equal( y[7], asinh(88.) ) );
1880 TEST(TestVasinhdFastx8)
1884 CHECK(
fp_equal( y[0], asinh(11.) ) );
1885 CHECK(
fp_equal( y[1], asinh(22.) ) );
1886 CHECK(
fp_equal( y[2], asinh(33.) ) );
1887 CHECK(
fp_equal( y[3], asinh(44.) ) );
1888 CHECK(
fp_equal( y[4], asinh(55.) ) );
1889 CHECK(
fp_equal( y[5], asinh(66.) ) );
1890 CHECK(
fp_equal( y[6], asinh(77.) ) );
1891 CHECK(
fp_equal( y[7], asinh(88.) ) );
1897 vasinh(y,11.f,22.f,33.f,44.f);
1898 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1899 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1900 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1901 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1904 TEST(TestVasinhfFastx4)
1908 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1909 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1910 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1911 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1917 vasinh(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1918 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1919 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1920 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1921 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1922 CHECK(
fp_equal( y[4], asinhf(55.f) ) );
1923 CHECK(
fp_equal( y[5], asinhf(66.f) ) );
1924 CHECK(
fp_equal( y[6], asinhf(77.f) ) );
1925 CHECK(
fp_equal( y[7], asinhf(88.f) ) );
1928 TEST(TestVasinhfFastx8)
1931 vfast_asinh(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f);
1932 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1933 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1934 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1935 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1936 CHECK(
fp_equal( y[4], asinhf(55.f) ) );
1937 CHECK(
fp_equal( y[5], asinhf(66.f) ) );
1938 CHECK(
fp_equal( y[6], asinhf(77.f) ) );
1939 CHECK(
fp_equal( y[7], asinhf(88.f) ) );
1942 TEST(TestVasinhfx16)
1945 vasinh(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1946 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1947 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1948 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1949 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1950 CHECK(
fp_equal( y[4], asinhf(55.f) ) );
1951 CHECK(
fp_equal( y[5], asinhf(66.f) ) );
1952 CHECK(
fp_equal( y[6], asinhf(77.f) ) );
1953 CHECK(
fp_equal( y[7], asinhf(88.f) ) );
1954 CHECK(
fp_equal( y[8], asinhf(111.f) ) );
1955 CHECK(
fp_equal( y[9], asinhf(122.f) ) );
1956 CHECK(
fp_equal( y[10], asinhf(133.f) ) );
1957 CHECK(
fp_equal( y[11], asinhf(144.f) ) );
1958 CHECK(
fp_equal( y[12], asinhf(155.f) ) );
1959 CHECK(
fp_equal( y[13], asinhf(166.f) ) );
1960 CHECK(
fp_equal( y[14], asinhf(177.f) ) );
1961 CHECK(
fp_equal( y[15], asinhf(188.f) ) );
1964 TEST(TestVasinhfFastx16)
1967 vfast_asinh(y,11.f,22.f,33.f,44.f,55.f,66.f,77.f,88.f,111.f,122.f,133.f,144.f,155.f,166.f,177.f,188.f);
1968 CHECK(
fp_equal( y[0], asinhf(11.f) ) );
1969 CHECK(
fp_equal( y[1], asinhf(22.f) ) );
1970 CHECK(
fp_equal( y[2], asinhf(33.f) ) );
1971 CHECK(
fp_equal( y[3], asinhf(44.f) ) );
1972 CHECK(
fp_equal( y[4], asinhf(55.f) ) );
1973 CHECK(
fp_equal( y[5], asinhf(66.f) ) );
1974 CHECK(
fp_equal( y[6], asinhf(77.f) ) );
1975 CHECK(
fp_equal( y[7], asinhf(88.f) ) );
1976 CHECK(
fp_equal( y[8], asinhf(111.f) ) );
1977 CHECK(
fp_equal( y[9], asinhf(122.f) ) );
1978 CHECK(
fp_equal( y[10], asinhf(133.f) ) );
1979 CHECK(
fp_equal( y[11], asinhf(144.f) ) );
1980 CHECK(
fp_equal( y[12], asinhf(155.f) ) );
1981 CHECK(
fp_equal( y[13], asinhf(166.f) ) );
1982 CHECK(
fp_equal( y[14], asinhf(177.f) ) );
1983 CHECK(
fp_equal( y[15], asinhf(188.f) ) );
void avx_free(void *p_ptr_alloc)
void vlog10(const double x[], double y[], long nlo, long nhi)
void vfast_asinh(const double x[], double y[], long nlo, long nhi)
void invalidate_array(T *p, size_t size)
ALIGNED(CD_ALIGN) static const double qg32_w[numPoints]
void vlog1p(const double x[], double y[], long nlo, long nhi)
void vhypot(const double x1[], const double x2[], double y[], long nlo, long nhi)
unsigned long genrand_int32()
void vlog(const double x[], double y[], long nlo, long nhi)
double reduce_a(const double *a, long ilo, long ihi)
void * avx_alloc(size_t sz)
void vexp(const double x[], double y[], long nlo, long nhi)
bool fp_equal(sys_float x, sys_float y, int n=3)
void vexp10(const double x[], double y[], long nlo, long nhi)
double reduce_abc_ab(const double *a, const double *b, const double *c, long ilo, long ihi, double *sum_ab)
void vasinh(const double x[], double y[], long nlo, long nhi)
double reduce_ab(const double *a, const double *b, long ilo, long ihi)
double reduce_ab_a(const double *a, const double *b, long ilo, long ihi, double *sum_a)
void vsqrt(const double x[], double y[], long nlo, long nhi)
double reduce_abc(const double *a, const double *b, const double *c, long ilo, long ihi)
double pow(double x, int i)
void init_genrand(unsigned long s)
void vexpm1(const double x[], double y[], long nlo, long nhi)