Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: lib/sdk/crt/float/fpclass.c * PURPOSE: Floating-point classes * PROGRAMER: Pierre Schweitzer (pierre@reactos.org) * REFERENCE: http://babbage.cs.qc.cuny.edu/IEEE-754/References.xhtml */
#include <precomp.h>#include <float.h>#include <internal/ieee.h>
/* * @implemented */int _fpclass(double __d){ union { double* __d; double_s* d; } d; d.__d = &__d;
/* With 0x7ff, it can only be infinity or NaN */ if (d.d->exponent == 0x7ff) { if (d.d->mantissah == 0 && d.d->mantissal == 0) { return (d.d->sign == 0) ? _FPCLASS_PINF : _FPCLASS_NINF; } /* Windows will never return Signaling NaN */ else { return _FPCLASS_QNAN; } }
/* With 0, it can only be zero or denormalized number */ if (d.d->exponent == 0) { if (d.d->mantissah == 0 && d.d->mantissal == 0) { return (d.d->sign == 0) ? _FPCLASS_PZ : _FPCLASS_NZ; } else { return (d.d->sign == 0) ? _FPCLASS_PD : _FPCLASS_ND; } } /* Only remain normalized numbers */ else { return (d.d->sign == 0) ? _FPCLASS_PN : _FPCLASS_NN; }}