Mercurial > forge
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 |