41 if (a_nr == 0 && (b_nr == 0 || b_nr == 1))
43 if (a_nc == 1 || b_nc == 1 || a_nc == b_nc)
44 r.
resize (a_nr, std::max (a_nc, b_nc));
46 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
48 else if (a_nc == 0 && (b_nc == 0 || b_nc == 1))
50 if (a_nr == 1 || b_nr == 1 || a_nr == b_nr)
51 r.
resize (std::max (a_nr, b_nr), a_nc);
53 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
55 else if (b_nr == 0 && (a_nr == 0 || a_nr == 1))
57 if (b_nc == 1 || a_nc == 1 || b_nc == a_nc)
58 r.
resize (b_nr, std::max (a_nc, b_nc));
60 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
62 else if (b_nc == 0 && (a_nc == 0 || a_nc == 1))
64 if (b_nr == 1 || a_nr == 1 || b_nr == a_nr)
65 r.
resize (std::max (a_nr, b_nr), b_nc);
67 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
69 else if (a_nr != b_nr || a_nc != b_nc)
70 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
80 bool ja_lt_max = ja < ja_max;
84 bool jb_lt_max = jb < jb_max;
86 while (ja_lt_max || jb_lt_max)
89 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
95 ja_lt_max= ja < ja_max;
97 else if ((! ja_lt_max)
104 jb_lt_max= jb < jb_max;
108 if (op (a.
data (ja), b.
data (jb)) != 0.)
115 ja_lt_max= ja < ja_max;
117 jb_lt_max= jb < jb_max;
332 const char *op_name,
bool negate)
342 if (a_nr == 1 && a_nc == 1)
344 if (a.
elem (0, 0) == 0.)
366 else if (b_nr == 1 && b_nc == 1)
368 if (b.
elem (0, 0) == 0.)
387 else if (a_nr == 0 && (b_nr == 0 || b_nr == 1))
389 if (a_nc == 1 || b_nc == 1 || a_nc == b_nc)
390 r.
resize (a_nr, std::max (a_nc, b_nc));
392 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
394 else if (a_nc == 0 && (b_nc == 0 || b_nc == 1))
396 if (a_nr == 1 || b_nr == 1 || a_nr == b_nr)
397 r.
resize (std::max (a_nr, b_nr), a_nc);
399 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
401 else if (b_nr == 0 && (a_nr == 0 || a_nr == 1))
403 if (b_nc == 1 || a_nc == 1 || b_nc == a_nc)
404 r.
resize (b_nr, std::max (a_nc, b_nc));
406 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
408 else if (b_nc == 0 && (a_nc == 0 || a_nc == 1))
410 if (b_nr == 1 || a_nr == 1 || b_nr == a_nr)
411 r.
resize (std::max (a_nr, b_nr), b_nc);
413 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
415 else if (a_nr == b_nr && a_nc == b_nc)
425 bool ja_lt_max = ja < ja_max;
429 bool jb_lt_max = jb < jb_max;
431 while (ja_lt_max || jb_lt_max)
434 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
440 ja_lt_max = ja < ja_max;
442 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
448 jb_lt_max = jb < jb_max;
452 if (op (a.
data (ja), b.
data (jb)) != 0.)
459 ja_lt_max = ja < ja_max;
461 jb_lt_max = jb < jb_max;
468 else if (a_nr == b_nr && (a_nc == 1 || b_nc == 1))
474 a.
nnz () + a_nc * b.
nnz ());
490 jb_max = b.
cidx (i+1);
495 ja_max = a.
cidx(i+1);
499 bool ja_lt_max = ja < ja_max;
500 bool jb_lt_max = jb < jb_max;
502 while (ja_lt_max || jb_lt_max)
505 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
511 ja_lt_max = ja < ja_max;
513 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
519 jb_lt_max = jb < jb_max;
523 if (op (a.
data (ja), b.
data (jb)) != 0.)
530 ja_lt_max = ja < ja_max;
532 jb_lt_max = jb < jb_max;
539 else if (a_nr == 1 && b_nc == 1)
553 const T a_val = a.
elem (0, j);
559 const T b_val = b.
elem (i, 0);
560 const T val = op (a_val, b_val);
569 octave::err_nonconformant (op_name, a_nr, a_nc, b_nr, b_nc);
612 if (a_nr == 1 && a_nc == 1)
614 if (a.
elem (0, 0) == 0.)
616 else if (octave::math::isnan (a.
elem (0, 0)))
620 r.
elem(i) = octave::numeric_limits<T>::NaN ();
622 else if (octave::math::isinf (a.
elem (0, 0)))
631 if (b.
elem (i, j) == 0.0)
632 r.
elem (i, j) = octave::numeric_limits<T>::NaN ();
652 else if (b_nr == 1 && b_nc == 1)
654 if (b.
elem (0, 0) == 0.)
656 else if (octave::math::isnan (b.
elem (0, 0)))
660 r.
elem(i) = octave::numeric_limits<T>::NaN ();
662 else if (octave::math::isinf (b.
elem (0, 0)))
671 if (a.
elem (i, j) == 0.0)
672 r.
elem (i, j) = octave::numeric_limits<T>::NaN ();
692 else if (a_nr == 0 && (b_nr == 0 || b_nr == 1))
694 if (a_nc == 1 || b_nc == 1 || a_nc == b_nc)
695 r.
resize (a_nr, std::max (a_nc, b_nc));
697 octave::err_nonconformant (
"product", a_nr, a_nc, b_nr, b_nc);
699 else if (a_nc == 0 && (b_nc == 0 || b_nc == 1))
701 if (a_nr == 1 || b_nr == 1 || a_nr == b_nr)
702 r.
resize (std::max (a_nr, b_nr), a_nc);
704 octave::err_nonconformant (
"product", a_nr, a_nc, b_nr, b_nc);
706 else if (b_nr == 0 && (a_nr == 0 || a_nr == 1))
708 if (b_nc == 1 || a_nc == 1 || b_nc == a_nc)
709 r.
resize (b_nr, std::max (a_nc, b_nc));
711 octave::err_nonconformant (
"product", a_nr, a_nc, b_nr, b_nc);
713 else if (b_nc == 0 && (a_nc == 0 || a_nc == 1))
715 if (b_nr == 1 || a_nr == 1 || b_nr == a_nr)
716 r.
resize (std::max (a_nr, b_nr), b_nc);
718 octave::err_nonconformant (
"product", a_nr, a_nc, b_nr, b_nc);
720 else if (a_nr == b_nr && a_nc == b_nc &&
733 else if (a_nr == b_nr && a_nc == b_nc)
743 bool ja_lt_max = ja < ja_max;
747 bool jb_lt_max = jb < jb_max;
749 while (ja_lt_max || jb_lt_max)
752 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
755 ja_lt_max = ja < ja_max;
757 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
760 jb_lt_max = jb < jb_max;
764 if ((a.
data (ja) * b.
data (jb)) != 0.)
771 ja_lt_max = ja < ja_max;
773 jb_lt_max = jb < jb_max;
780 else if (a_nr == b_nr && (a_nc == 1 || b_nc == 1) &&
806 else if (a_nr == b_nr && (a_nc == 1 || b_nc == 1))
810 a.
nnz () + a_nc * b.
nnz ());
826 jb_max = b.
cidx (i+1);
831 ja_max = a.
cidx(i+1);
835 bool ja_lt_max = ja < ja_max;
836 bool jb_lt_max = jb < jb_max;
838 while (ja_lt_max || jb_lt_max)
841 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
844 ja_lt_max = ja < ja_max;
846 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
849 jb_lt_max = jb < jb_max;
853 if ((a.
data (ja) * b.
data (jb)) != 0.)
860 ja_lt_max = ja < ja_max;
862 jb_lt_max = jb < jb_max;
869 else if (a_nc == b_nc && (a_nr == 1 || b_nr == 1))
871 else if (a_nr == 1 && b_nc == 1 &&
884 else if (a_nr == 1 && b_nc == 1)
894 bool ja_lt_max = ja < ja_max;
898 bool jb_lt_max = jb < jb_max;
900 while (ja_lt_max || jb_lt_max)
903 if (! ja_lt_max && jb_lt_max)
906 jb_lt_max = jb < jb_max;
908 else if (ja_lt_max && ! jb_lt_max)
914 if ((a.
data (ja) * b.
data (jb)) != 0.)
921 jb_lt_max = jb < jb_max;
922 ja_lt_max = jb_lt_max;
929 else if (a_nc == 1 && b_nr == 1)
932 octave::err_nonconformant (
"product", a_nr, a_nc, b_nr, b_nc);
950 if (a_nr == 1 && a_nc == 1)
952 T val = a.
elem (0, 0);
978 else if (b_nr == 1 && b_nc == 1)
980 T val = b.
elem (0, 0);
1006 else if (a_nr == 0 && (b_nr == 0 || b_nr == 1))
1008 if (a_nc == 1 || b_nc == 1 || a_nc == b_nc)
1009 r.
resize (a_nr, std::max (a_nc, b_nc));
1011 octave::err_nonconformant (
"quotient", a_nr, a_nc, b_nr, b_nc);
1013 else if (a_nc == 0 && (b_nc == 0 || b_nc == 1))
1015 if (a_nr == 1 || b_nr == 1 || a_nr == b_nr)
1016 r.
resize (std::max (a_nr, b_nr), a_nc);
1018 octave::err_nonconformant (
"quotient", a_nr, a_nc, b_nr, b_nc);
1020 else if (b_nr == 0 && (a_nr == 0 || a_nr == 1))
1022 if (b_nc == 1 || a_nc == 1 || b_nc == a_nc)
1023 r.
resize (b_nr, std::max (a_nc, b_nc));
1025 octave::err_nonconformant (
"quotient", a_nr, a_nc, b_nr, b_nc);
1027 else if (b_nc == 0 && (a_nc == 0 || a_nc == 1))
1029 if (b_nr == 1 || a_nr == 1 || b_nr == a_nr)
1030 r.
resize (std::max (a_nr, b_nr), b_nc);
1032 octave::err_nonconformant (
"quotient", a_nr, a_nc, b_nr, b_nc);
1034 else if (a_nr == b_nr && a_nc == b_nc)
1042 bool ja_lt_max = ja < ja_max;
1046 bool jb_lt_max = jb < jb_max;
1048 while (ja_lt_max || jb_lt_max)
1051 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
1055 ja_lt_max = ja < ja_max;
1057 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
1061 jb_lt_max = jb < jb_max;
1067 ja_lt_max = ja < ja_max;
1069 jb_lt_max = jb < jb_max;
1075 else if (a_nr == b_nr && (a_nc == 1 || b_nc == 1))
1091 jb_max = b.
cidx (i+1);
1096 ja_max = a.
cidx(i+1);
1098 jb_max = b.
cidx (1);
1100 bool ja_lt_max = ja < ja_max;
1101 bool jb_lt_max = jb < jb_max;
1103 while (ja_lt_max || jb_lt_max)
1106 if ((! jb_lt_max) || (ja_lt_max && (a.
ridx (ja) < b.
ridx (jb))))
1110 ja_lt_max = ja < ja_max;
1112 else if ((! ja_lt_max) || (b.
ridx (jb) < a.
ridx (ja)))
1116 jb_lt_max = jb < jb_max;
1122 ja_lt_max = ja < ja_max;
1124 jb_lt_max = jb < jb_max;
1130 else if (a_nc == b_nc && (a_nr == 1 || b_nr == 1))
1132 else if (a_nr == 1 && b_nc == 1)
1138 const T a_val = a.
elem (0, j);
1144 const T b_val = b.
elem (i, 0);
1145 const T val = a_val / b_val;
1147 if (val != Zero || val != val)
1148 r.
elem (i, j) = val;
1153 else if (a_nc == 1 && b_nr == 1)
1156 octave::err_nonconformant (
"quotient", a_nr, a_nc, b_nr, b_nc);