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 /** Add explicit padding to ensure this data structure 73 * is properly aligned. 74 */ 75 uint16_t pad[3]; 76 } repr; 77 /** 78 * Represented as a char array, mainly intended for debug dumping 79 * and serialization. 80 */ 81 char bits[16]; 82} fp80_t; 83 84/** @} */ 85 86#ifdef __cplusplus 87} /* extern "C" */ 88#endif 89 90#endif 91