Skip to content

Commit d306fb2

Browse files
committed
Try different min/max implementation
1 parent 6318c77 commit d306fb2

File tree

1 file changed

+12
-32
lines changed
  • quaddtype/numpy_quaddtype/src

1 file changed

+12
-32
lines changed

quaddtype/numpy_quaddtype/src/ops.hpp

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -514,53 +514,33 @@ quad_mod(const Sleef_quad *a, const Sleef_quad *b)
514514
static inline Sleef_quad
515515
quad_minimum(const Sleef_quad *in1, const Sleef_quad *in2)
516516
{
517-
if (Sleef_iunordq1(*in1, *in2)) {
518-
return Sleef_iunordq1(*in1, *in1) ? *in1 : *in2;
519-
}
520-
// minimum(-0.0, +0.0) = -0.0
521-
if (Sleef_icmpeqq1(*in1, QUAD_ZERO) && Sleef_icmpeqq1(*in2, QUAD_ZERO)) {
522-
return Sleef_icmpleq1(Sleef_copysignq1(QUAD_ONE, *in1), Sleef_copysignq1(QUAD_ONE, *in2)) ? *in1 : *in2;
523-
}
524-
return Sleef_fminq1(*in1, *in2);
517+
return Sleef_iunordq1(*in1, *in2) ? (Sleef_iunordq1(*in1, *in1) ? *in1 : *in2)
518+
: Sleef_icmpltq1(*in1, *in2) ? *in1
519+
: *in2;
525520
}
526521

527522
static inline Sleef_quad
528523
quad_maximum(const Sleef_quad *in1, const Sleef_quad *in2)
529524
{
530-
if (Sleef_iunordq1(*in1, *in2)) {
531-
return Sleef_iunordq1(*in1, *in1) ? *in1 : *in2;
532-
}
533-
// maximum(-0.0, +0.0) = +0.0
534-
if (Sleef_icmpeqq1(*in1, QUAD_ZERO) && Sleef_icmpeqq1(*in2, QUAD_ZERO)) {
535-
return Sleef_icmpgeq1(Sleef_copysignq1(QUAD_ONE, *in1), Sleef_copysignq1(QUAD_ONE, *in2)) ? *in1 : *in2;
536-
}
537-
return Sleef_fmaxq1(*in1, *in2);
525+
return Sleef_iunordq1(*in1, *in2) ? (Sleef_iunordq1(*in1, *in1) ? *in1 : *in2)
526+
: Sleef_icmpgtq1(*in1, *in2) ? *in1
527+
: *in2;
538528
}
539529

540530
static inline Sleef_quad
541531
quad_fmin(const Sleef_quad *in1, const Sleef_quad *in2)
542532
{
543-
if (Sleef_iunordq1(*in1, *in2)) {
544-
return Sleef_iunordq1(*in2, *in2) ? *in1 : *in2;
545-
}
546-
// fmin(-0.0, +0.0) = -0.0
547-
if (Sleef_icmpeqq1(*in1, QUAD_ZERO) && Sleef_icmpeqq1(*in2, QUAD_ZERO)) {
548-
return Sleef_icmpleq1(Sleef_copysignq1(QUAD_ONE, *in1), Sleef_copysignq1(QUAD_ONE, *in2)) ? *in1 : *in2;
549-
}
550-
return Sleef_fminq1(*in1, *in2);
533+
return Sleef_iunordq1(*in1, *in2) ? (Sleef_iunordq1(*in2, *in2) ? *in1 : *in2)
534+
: Sleef_icmpleq1(*in1, *in2) ? *in1
535+
: *in2;
551536
}
552537

553538
static inline Sleef_quad
554539
quad_fmax(const Sleef_quad *in1, const Sleef_quad *in2)
555540
{
556-
if (Sleef_iunordq1(*in1, *in2)) {
557-
return Sleef_iunordq1(*in2, *in2) ? *in1 : *in2;
558-
}
559-
// maximum(-0.0, +0.0) = +0.0
560-
if (Sleef_icmpeqq1(*in1, QUAD_ZERO) && Sleef_icmpeqq1(*in2, QUAD_ZERO)) {
561-
return Sleef_icmpgeq1(Sleef_copysignq1(QUAD_ONE, *in1), Sleef_copysignq1(QUAD_ONE, *in2)) ? *in1 : *in2;
562-
}
563-
return Sleef_fmaxq1(*in1, *in2);
541+
return Sleef_iunordq1(*in1, *in2) ? (Sleef_iunordq1(*in2, *in2) ? *in1 : *in2)
542+
: Sleef_icmpgeq1(*in1, *in2) ? *in1
543+
: *in2;
564544
}
565545

566546
static inline Sleef_quad

0 commit comments

Comments
 (0)