comparison extra/NaN/src/sumskipnan_mex.cpp @ 12685:f26b1170ea90 octave-forge

resulting values should be really converted to output data type
author schloegl
date Sat, 12 Sep 2015 07:15:01 +0000
parents de98e4cb9248
children 6d6285a2a633
comparison
equal deleted inserted replaced
12684:29631e455f62 12685:f26b1170ea90
325 } while (ix2 != (l+1)*D1); 325 } while (ix2 != (l+1)*D1);
326 } // end for (j= 326 } // end for (j=
327 327
328 /* copy to output */ 328 /* copy to output */
329 for (j=0; j<D1; j++) { 329 for (j=0; j<D1; j++) {
330 LOutputSum[ix0+j] = LongOutputSum[ix0+j]; 330 LOutputSum[ix0+j] = (typeof(*LOutputSum))LongOutputSum[ix0+j];
331 } 331 }
332 } 332 }
333 } 333 }
334 334
335 else if (POutputCount == 2) { 335 else if (POutputCount == 2) {
369 } while (ix2 != (l+1)*D1); 369 } while (ix2 != (l+1)*D1);
370 } // end for (j= 370 } // end for (j=
371 371
372 /* copy to output */ 372 /* copy to output */
373 for (j=0; j<D1; j++) { 373 for (j=0; j<D1; j++) {
374 LOutputSum[ix0+j] = LongOutputSum[ix0+j]; 374 LOutputSum[ix0+j] = (typeof(*LOutputSum))LongOutputSum[ix0+j];
375 LOutputCount[ix0+j] = LongOutputCount[ix0+j]; 375 LOutputCount[ix0+j] = (typeof(*LOutputCount))LongOutputCount[ix0+j];
376 } // end else 376 } // end else
377 } 377 }
378 } 378 }
379 379
380 else if (POutputCount == 3) { 380 else if (POutputCount == 3) {
388 // Inner LOOP: along dimensions < DIM 388 // Inner LOOP: along dimensions < DIM
389 if (W) do { 389 if (W) do {
390 long double x = *LInput; 390 long double x = *LInput;
391 if (!isnan(x)) { 391 if (!isnan(x)) {
392 LongOutputCount[ix2] += W[j]; 392 LongOutputCount[ix2] += W[j];
393 double t = W[j]*x; 393 long double t = W[j]*x;
394 LongOutputSum[ix2] += t; 394 LongOutputSum[ix2] += t;
395 LongOutputSum2[ix2] += x*t; 395 LongOutputSum2[ix2] += x*t;
396 } 396 }
397 #ifndef NO_FLAG 397 #ifndef NO_FLAG
398 else 398 else
417 } while (ix2 != (l+1)*D1); 417 } while (ix2 != (l+1)*D1);
418 } // end for (j= 418 } // end for (j=
419 419
420 /* copy to output */ 420 /* copy to output */
421 for (j=0; j<D1; j++) { 421 for (j=0; j<D1; j++) {
422 LOutputSum[ix0+j] = LongOutputSum[ix0+j]; 422 LOutputSum[ix0+j] = (typeof(*LOutputSum))LongOutputSum[ix0+j];
423 LOutputCount[ix0+j] = LongOutputCount[ix0+j]; 423 LOutputCount[ix0+j] = (typeof(*LOutputCount))LongOutputCount[ix0+j];
424 LOutputSum2[ix0+j] = LongOutputSum2[ix0+j]; 424 LOutputSum2[ix0+j] = (typeof(*LOutputSum2))LongOutputSum2[ix0+j];
425 } 425 }
426 } 426 }
427 } 427 }
428 428
429 if (LongOutputSum) mxFree(LongOutputSum); 429 if (LongOutputSum) mxFree(LongOutputSum);
498 498
499 data++; // stride=1 499 data++; // stride=1
500 W++; 500 W++;
501 } 501 }
502 while (data < end); 502 while (data < end);
503 *No = count; 503 *No = (typeof(*No))count;
504 } else { 504 } else {
505 // w/o weight vector 505 // w/o weight vector
506 size_t countI = 0; 506 size_t countI = 0;
507 do { 507 do {
508 long double x = *data; 508 long double x = *data;
516 flag = 1; 516 flag = 1;
517 #endif 517 #endif
518 data++; // stride=1 518 data++; // stride=1
519 } 519 }
520 while (data < end); 520 while (data < end);
521 *No = (double)countI; 521 *No = (typeof(*No))countI;
522 } 522 }
523 523
524 #ifndef NO_FLAG 524 #ifndef NO_FLAG
525 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 525 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
526 #endif 526 #endif
527 *s = sum; 527 *s = (typeof(*s))sum;
528 528
529 } 529 }
530 530
531 531
532 inline void __sumskipnan3w__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W) 532 inline void __sumskipnan3w__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W)
554 #endif 554 #endif
555 data++; // stride=1 555 data++; // stride=1
556 W++; 556 W++;
557 } 557 }
558 while (data < end); 558 while (data < end);
559 *No = count; 559 *No = (typeof(*No))count;
560 } else { 560 } else {
561 // w/o weight vector 561 // w/o weight vector
562 size_t countI = 0; 562 size_t countI = 0;
563 do { 563 do {
564 long double x = *data; 564 long double x = *data;
572 flag = 1; 572 flag = 1;
573 #endif 573 #endif
574 data++; // stride=1 574 data++; // stride=1
575 } 575 }
576 while (data < end); 576 while (data < end);
577 *No = (double)countI; 577 *No = (typeof(*No))countI;
578 } 578 }
579 579
580 #ifndef NO_FLAG 580 #ifndef NO_FLAG
581 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 581 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
582 #endif 582 #endif
583 *s = sum; 583 *s = (typeof(*s))sum;
584 *s2 = msq; 584 *s2 = (typeof(*s2))msq;
585 } 585 }
586 586
587 inline void __sumskipnan2wr__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W) 587 inline void __sumskipnan2wr__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W)
588 { 588 {
589 double sum=0; 589 double sum=0;
608 608
609 data++; // stride=1 609 data++; // stride=1
610 W++; 610 W++;
611 } 611 }
612 while (data < end); 612 while (data < end);
613 *No = count; 613 *No = (typeof(*No))count;
614 } else { 614 } else {
615 // w/o weight vector 615 // w/o weight vector
616 size_t countI = 0; 616 size_t countI = 0;
617 do { 617 do {
618 double x = *data; 618 double x = *data;
626 flag = 1; 626 flag = 1;
627 #endif 627 #endif
628 data++; // stride=1 628 data++; // stride=1
629 } 629 }
630 while (data < end); 630 while (data < end);
631 *No = (double)countI; 631 *No = (typeof(*No))countI;
632 } 632 }
633 633
634 #ifndef NO_FLAG 634 #ifndef NO_FLAG
635 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 635 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
636 #endif 636 #endif
637 *s = sum; 637 *s = (typeof(*s))sum;
638 638
639 } 639 }
640 640
641 641
642 inline void __sumskipnan3wr__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W) 642 inline void __sumskipnan3wr__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W)
682 flag = 1; 682 flag = 1;
683 #endif 683 #endif
684 data++; // stride=1 684 data++; // stride=1
685 } 685 }
686 while (data < end); 686 while (data < end);
687 *No = (double)countI; 687 *No = (typeof(*No))countI;
688 } 688 }
689 689
690 #ifndef NO_FLAG 690 #ifndef NO_FLAG
691 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 691 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
692 #endif 692 #endif
693 *s = sum; 693 *s = (typeof(*s))sum;
694 *s2 = msq; 694 *s2 = (typeof(*s2))msq;
695 } 695 }
696 696
697 697
698 698
699 /*************************************** 699 /***************************************
741 741
742 data++; // stride=1 742 data++; // stride=1
743 W++; 743 W++;
744 } 744 }
745 while (data < end); 745 while (data < end);
746 *No = count; 746 *No = (typeof(*No))count;
747 } else { 747 } else {
748 // w/o weight vector 748 // w/o weight vector
749 size_t countI = 0; 749 size_t countI = 0;
750 long double rc=0.0; 750 long double rc=0.0;
751 do { 751 do {
765 flag = 1; 765 flag = 1;
766 #endif 766 #endif
767 data++; // stride=1 767 data++; // stride=1
768 } 768 }
769 while (data < end); 769 while (data < end);
770 *No = (double)countI; 770 *No = (typeof(*No))countI;
771 } 771 }
772 772
773 #ifndef NO_FLAG 773 #ifndef NO_FLAG
774 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 774 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
775 #endif 775 #endif
776 *s = sum; 776 *s = (typeof(*s))sum;
777 777
778 } 778 }
779 779
780 780
781 inline void __sumskipnan3we__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W) 781 inline void __sumskipnan3we__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W)
819 #endif 819 #endif
820 data++; // stride=1 820 data++; // stride=1
821 W++; 821 W++;
822 } 822 }
823 while (data < end); 823 while (data < end);
824 *No = count; 824 *No = (typeof(*No))count;
825 } else { 825 } else {
826 // w/o weight vector 826 // w/o weight vector
827 size_t countI = 0; 827 size_t countI = 0;
828 long double rc=0.0, rq=0.0; 828 long double rc=0.0, rq=0.0;
829 do { 829 do {
848 flag = 1; 848 flag = 1;
849 #endif 849 #endif
850 data++; // stride=1 850 data++; // stride=1
851 } 851 }
852 while (data < end); 852 while (data < end);
853 *No = (double)countI; 853 *No = (typeof(*No))countI;
854 } 854 }
855 855
856 #ifndef NO_FLAG 856 #ifndef NO_FLAG
857 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 857 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
858 #endif 858 #endif
859 *s = sum; 859 *s = (typeof(*s))sum;
860 *s2 = msq; 860 *s2 = (typeof(*s))msq;
861 } 861 }
862 862
863 inline void __sumskipnan2wer__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W) 863 inline void __sumskipnan2wer__(double *data, size_t Ni, double *s, double *No, char *flag_anyISNAN, double *W)
864 { 864 {
865 double sum=0; 865 double sum=0;
895 895
896 data++; // stride=1 896 data++; // stride=1
897 W++; 897 W++;
898 } 898 }
899 while (data < end); 899 while (data < end);
900 *No = count; 900 *No = (typeof(*No))count;
901 } else { 901 } else {
902 // w/o weight vector 902 // w/o weight vector
903 size_t countI = 0; 903 size_t countI = 0;
904 double rc=0.0; 904 double rc=0.0;
905 do { 905 do {
919 flag = 1; 919 flag = 1;
920 #endif 920 #endif
921 data++; // stride=1 921 data++; // stride=1
922 } 922 }
923 while (data < end); 923 while (data < end);
924 *No = (double)countI; 924 *No = (typeof(*No))countI;
925 } 925 }
926 926
927 #ifndef NO_FLAG 927 #ifndef NO_FLAG
928 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 928 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
929 #endif 929 #endif
930 *s = sum; 930 *s = (typeof(*s))sum;
931 931
932 } 932 }
933 933
934 934
935 inline void __sumskipnan3wer__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W) 935 inline void __sumskipnan3wer__(double *data, size_t Ni, double *s, double *s2, double *No, char *flag_anyISNAN, double *W)
973 #endif 973 #endif
974 data++; // stride=1 974 data++; // stride=1
975 W++; 975 W++;
976 } 976 }
977 while (data < end); 977 while (data < end);
978 *No = count; 978 *No = (typeof(*No))count;
979 } else { 979 } else {
980 // w/o weight vector 980 // w/o weight vector
981 size_t countI = 0; 981 size_t countI = 0;
982 double rc=0.0, rq=0.0; 982 double rc=0.0, rq=0.0;
983 do { 983 do {
1002 flag = 1; 1002 flag = 1;
1003 #endif 1003 #endif
1004 data++; // stride=1 1004 data++; // stride=1
1005 } 1005 }
1006 while (data < end); 1006 while (data < end);
1007 *No = (double)countI; 1007 *No = (typeof(*No))countI;
1008 } 1008 }
1009 1009
1010 #ifndef NO_FLAG 1010 #ifndef NO_FLAG
1011 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1; 1011 if (flag && (flag_anyISNAN != NULL)) *flag_anyISNAN = 1;
1012 #endif 1012 #endif
1013 *s = sum; 1013 *s = (typeof(*s))sum;
1014 *s2 = msq; 1014 *s2 = (typeof(*s))msq;
1015 } 1015 }
1016 1016