DYND_CUDA_HOST_DEVICE bool less_nonan(const dynd_float16& rhs) const { if (signbit_()) { if (rhs.signbit_()) { return m_bits > rhs.m_bits; } else { // Signed zeros are equal, have to check for it return (m_bits != 0x8000u) || (rhs.m_bits != 0x0000u); } } else { if (rhs.signbit_()) { return false; } else { return m_bits < rhs.m_bits; } } }
DYND_CUDA_HOST_DEVICE bool less_equal_nonan(const dynd_float16& rhs) const { if (signbit_()) { if (rhs.signbit_()) { return m_bits >= rhs.m_bits; } else { return true; } } else { if (rhs.signbit_()) { // Signed zeros are equal, have to check for it return (m_bits == 0x0000u) && (rhs.m_bits == 0x8000u); } else { return m_bits <= rhs.m_bits; } } }
DYND_CUDA_HOST_DEVICE bool less_equal_nonan(const float128 &rhs) const { if (signbit_()) { if (rhs.signbit_()) { return m_hi > rhs.m_hi || (m_hi == rhs.m_hi && m_lo >= rhs.m_lo); } else { return true; } } else { if (rhs.signbit_()) { // Signed zeros are equal, have to check for it return (m_hi == 0x8000000000000000ULL) && (m_lo == 0LL) && (rhs.m_hi == 0LL) && rhs.m_lo == 0LL; } else { return m_hi < rhs.m_hi || (m_hi == rhs.m_hi && m_lo <= rhs.m_lo); } } }