fptypes.h revision 10480:5d4ebc92d32e
1/* 2 * Copyright (c) 2014, Andreas Sandberg 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials provided 14 * with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 20 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 27 * OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30#ifndef _FPTYPES_H 31#define _FPTYPES_H 1 32 33#include <stdint.h> 34 35#ifdef __cplusplus 36extern "C" { 37#endif 38 39/** 40 * @addtogroup fp64 41 * @{ 42 */ 43 44/** Internal representation of a 64-bit float */ 45typedef union { 46 /** 47 * Raw value exposed as an unsigned integer. Mainly used for bit 48 * manipulation. 49 */ 50 uint64_t bits; 51 /** Representation using the built-in double type */ 52 double value; 53} fp64_t; 54 55/** @} */ 56 57 58/** 59 * @addtogroup fp80 60 * @{ 61 */ 62 63/** Internal representation of an 80-bit float. */ 64typedef union { 65 struct { 66 /** Raw representation of the integer part bit and the 67 * fraction. Note that unlike 64-bit floating point 68 * representations the integer bit is explicit. */ 69 uint64_t fi; 70 /** Raw representation of sign bit and exponent */ 71 uint16_t se; 72 } repr; 73 /** 74 * Represented as a char array, mainly intended for debug dumping 75 * and serialization. 76 */ 77 char bits[10]; 78} fp80_t; 79 80/** @} */ 81 82#ifdef __cplusplus 83} /* extern "C" */ 84#endif 85 86#endif 87