/* Create local copies of the numbers */
Dbl_copyfromptr(leftptr,leftp1,leftp2);
Dbl_copyfromptr(rightptr,rightp1,rightp2); /* *TestforNaN
*/ if( (Dbl_exponent(leftp1) == DBL_INFINITY_EXPONENT)
|| (Dbl_exponent(rightp1) == DBL_INFINITY_EXPONENT) )
{ /* Check if a NaN is involved. Signal an invalid exception when *comparingasignalingNaNorwhencomparingquietNaNsandthe
* low bit of the condition is set */ if( ((Dbl_exponent(leftp1) == DBL_INFINITY_EXPONENT)
&& Dbl_isnotzero_mantissa(leftp1,leftp2)
&& (Exception(cond) || Dbl_isone_signaling(leftp1)))
||
((Dbl_exponent(rightp1) == DBL_INFINITY_EXPONENT)
&& Dbl_isnotzero_mantissa(rightp1,rightp2)
&& (Exception(cond) || Dbl_isone_signaling(rightp1))) )
{ if( Is_invalidtrap_enabled() ) {
Set_status_cbit(Unordered(cond)); return(INVALIDEXCEPTION);
} else Set_invalidflag();
Set_status_cbit(Unordered(cond)); return(NOEXCEPTION);
} /* All the exceptional conditions are handled, now special case
NaN compares */ elseif( ((Dbl_exponent(leftp1) == DBL_INFINITY_EXPONENT)
&& Dbl_isnotzero_mantissa(leftp1,leftp2))
||
((Dbl_exponent(rightp1) == DBL_INFINITY_EXPONENT)
&& Dbl_isnotzero_mantissa(rightp1,rightp2)) )
{ /* NaNs always compare unordered. */
Set_status_cbit(Unordered(cond)); return(NOEXCEPTION);
} /* infinities will drop down to the normal compare mechanisms */
} /* First compare for unequal signs => less or greater or
* special equal case */
Dbl_xortointp1(leftp1,rightp1,xorresult); if( xorresult < 0 )
{ /* left negative => less, left positive => greater.
* equal is possible if both operands are zeros. */ if( Dbl_iszero_exponentmantissa(leftp1,leftp2)
&& Dbl_iszero_exponentmantissa(rightp1,rightp2) )
{
Set_status_cbit(Equal(cond));
} elseif( Dbl_isone_sign(leftp1) )
{
Set_status_cbit(Lessthan(cond));
} else
{
Set_status_cbit(Greaterthan(cond));
}
} /* Signs are the same. Treat negative numbers separately
* from the positives because of the reversed sense. */ elseif(Dbl_isequal(leftp1,leftp2,rightp1,rightp2))
{
Set_status_cbit(Equal(cond));
} elseif( Dbl_iszero_sign(leftp1) )
{ /* Positive compare */ if( Dbl_allp1(leftp1) < Dbl_allp1(rightp1) )
{
Set_status_cbit(Lessthan(cond));
} elseif( Dbl_allp1(leftp1) > Dbl_allp1(rightp1) )
{
Set_status_cbit(Greaterthan(cond));
} else
{ /* Equal first parts. Now we must use unsigned compares to
* resolve the two possibilities. */ if( Dbl_allp2(leftp2) < Dbl_allp2(rightp2) )
{
Set_status_cbit(Lessthan(cond));
} else
{
Set_status_cbit(Greaterthan(cond));
}
}
} else
{ /* Negative compare. Signed or unsigned compares *bothworkthesame.Thatdistinctionisonly
* important when the sign bits differ. */ if( Dbl_allp1(leftp1) > Dbl_allp1(rightp1) )
{
Set_status_cbit(Lessthan(cond));
} elseif( Dbl_allp1(leftp1) < Dbl_allp1(rightp1) )
{
Set_status_cbit(Greaterthan(cond));
} else
{ /* Equal first parts. Now we must use unsigned compares to
* resolve the two possibilities. */ if( Dbl_allp2(leftp2) > Dbl_allp2(rightp2) )
{
Set_status_cbit(Lessthan(cond));
} else
{
Set_status_cbit(Greaterthan(cond));
}
}
} return(NOEXCEPTION);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.