numpy  2.0.0
include/numpy/halffloat.h
Go to the documentation of this file.
00001 #ifndef __NPY_HALFFLOAT_H__
00002 #define __NPY_HALFFLOAT_H__
00003 
00004 #include <Python.h>
00005 #include <numpy/npy_math.h>
00006 
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010 
00011 /*
00012  * Half-precision routines
00013  */
00014 
00015 /* Conversions */
00016 float npy_half_to_float(npy_half h);
00017 double npy_half_to_double(npy_half h);
00018 npy_half npy_float_to_half(float f);
00019 npy_half npy_double_to_half(double d);
00020 /* Comparisons */
00021 int npy_half_eq(npy_half h1, npy_half h2);
00022 int npy_half_ne(npy_half h1, npy_half h2);
00023 int npy_half_le(npy_half h1, npy_half h2);
00024 int npy_half_lt(npy_half h1, npy_half h2);
00025 int npy_half_ge(npy_half h1, npy_half h2);
00026 int npy_half_gt(npy_half h1, npy_half h2);
00027 /* faster *_nonan variants for when you know h1 and h2 are not NaN */
00028 int npy_half_eq_nonan(npy_half h1, npy_half h2);
00029 int npy_half_lt_nonan(npy_half h1, npy_half h2);
00030 int npy_half_le_nonan(npy_half h1, npy_half h2);
00031 /* Miscellaneous functions */
00032 int npy_half_iszero(npy_half h);
00033 int npy_half_isnan(npy_half h);
00034 int npy_half_isinf(npy_half h);
00035 int npy_half_isfinite(npy_half h);
00036 int npy_half_signbit(npy_half h);
00037 npy_half npy_half_copysign(npy_half x, npy_half y);
00038 npy_half npy_half_spacing(npy_half h);
00039 npy_half npy_half_nextafter(npy_half x, npy_half y);
00040 
00041 /*
00042  * Half-precision constants
00043  */
00044 
00045 #define NPY_HALF_ZERO   (0x0000u)
00046 #define NPY_HALF_PZERO  (0x0000u)
00047 #define NPY_HALF_NZERO  (0x8000u)
00048 #define NPY_HALF_ONE    (0x3c00u)
00049 #define NPY_HALF_NEGONE (0xbc00u)
00050 #define NPY_HALF_PINF   (0x7c00u)
00051 #define NPY_HALF_NINF   (0xfc00u)
00052 #define NPY_HALF_NAN    (0x7e00u)
00053 
00054 #define NPY_MAX_HALF    (0x7bffu)
00055 
00056 /*
00057  * Bit-level conversions
00058  */
00059 
00060 npy_uint16 npy_floatbits_to_halfbits(npy_uint32 f);
00061 npy_uint16 npy_doublebits_to_halfbits(npy_uint64 d);
00062 npy_uint32 npy_halfbits_to_floatbits(npy_uint16 h);
00063 npy_uint64 npy_halfbits_to_doublebits(npy_uint16 h);
00064 
00065 #ifdef __cplusplus
00066 }
00067 #endif
00068 
00069 #endif