/**************************************************************************** * libs/libc/stdio/lib_dtoa_data.c * * Copyright © 2018, Keith Packard * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ /**************************************************************************** * Included Files ****************************************************************************/ #include "lib_dtoa_engine.h" /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #ifndef DBL_MAX_10_EXP # error DBL_MAX_10_EXP #endif #ifndef DBL_MIN_10_EXP # error DBL_MIN_10_EXP #endif #ifndef DBL_DIG # error DBL_DIG #endif /* Make sure the computed sizes of the arrays match the actual sizes * by declaring an array which is legal if the sizes match and illegal * if they do not */ #define count_of(n) (sizeof (n) / sizeof (n[0])) #define match(array,size) (count_of(array) == size) #define check_match(array,size) (match(array, size) ? 1 : -1) /**************************************************************************** * Public Data ****************************************************************************/ const double g_dtoa_scale_up[] = { #if DBL_MAX_10_EXP >= 1 1e1, #endif #if DBL_MAX_10_EXP >= 2 1e2, #endif #if DBL_MAX_10_EXP >= 4 1e4, #endif #if DBL_MAX_10_EXP >= 8 1e8, #endif #if DBL_MAX_10_EXP >= 16 1e16, #endif #if DBL_MAX_10_EXP >= 32 1e32, #endif #if DBL_MAX_10_EXP >= 64 1e64, #endif #if DBL_MAX_10_EXP >= 128 1e128, #endif #if DBL_MAX_10_EXP >= 256 1e256, #endif #if DBL_MAX_10_EXP >= 512 1e512, #endif #if DBL_MAX_10_EXP >= 1024 1e1024, #endif #if DBL_MAX_10_EXP >= 2048 1e2048, #endif #if DBL_MAX_10_EXP >= 4096 1e4096, #endif #if DBL_MAX_10_EXP >= 8192 1e8192, #endif #if DBL_MAX_10_EXP >= 16384 1e16384, #endif #if DBL_MAX_10_EXP >= 32768 1e32768, #endif #if DBL_MAX_10_EXP >= 65536 1e65536, #endif }; const double g_dtoa_scale_down[] = { #if DBL_MIN_10_EXP <= -1 1e-1, #endif #if DBL_MIN_10_EXP <= -2 1e-2, #endif #if DBL_MIN_10_EXP <= -4 1e-4, #endif #if DBL_MIN_10_EXP <= -8 1e-8, #endif #if DBL_MIN_10_EXP <= -16 1e-16, #endif #if DBL_MIN_10_EXP <= -32 1e-32, #endif #if DBL_MIN_10_EXP <= -64 1e-64, #endif #if DBL_MIN_10_EXP <= -128 1e-128, #endif #if DBL_MIN_10_EXP <= -256 1e-256, #endif #if DBL_MIN_10_EXP <= -512 1e-512, #endif #if DBL_MIN_10_EXP <= -1024 1e-1024, #endif #if DBL_MIN_10_EXP <= -2048 1e-2048, #endif #if DBL_MIN_10_EXP <= -4096 1e-4096, #endif #if DBL_MIN_10_EXP <= -8192 1e-8192, #endif #if DBL_MIN_10_EXP <= -16384 1e-16384, #endif #if DBL_MIN_10_EXP <= -32768 1e-32768, #endif #if DBL_MIN_10_EXP <= -65536 1e-65536, #endif }; const double g_dtoa_round[] = { #if DBL_DIG >= 30 5e30, #endif #if DBL_DIG >= 29 5e29, #endif #if DBL_DIG >= 28 5e28, #endif #if DBL_DIG >= 27 5e27, #endif #if DBL_DIG >= 26 5e26, #endif #if DBL_DIG >= 25 5e25, #endif #if DBL_DIG >= 24 5e24, #endif #if DBL_DIG >= 23 5e23, #endif #if DBL_DIG >= 22 5e22, #endif #if DBL_DIG >= 21 5e21, #endif #if DBL_DIG >= 20 5e20, #endif #if DBL_DIG >= 19 5e19, #endif #if DBL_DIG >= 18 5e18, #endif #if DBL_DIG >= 17 5e17, #endif #if DBL_DIG >= 16 5e16, #endif #if DBL_DIG >= 15 5e15, #endif #if DBL_DIG >= 14 5e14, #endif #if DBL_DIG >= 13 5e13, #endif #if DBL_DIG >= 12 5e12, #endif #if DBL_DIG >= 11 5e11, #endif #if DBL_DIG >= 10 5e10, #endif #if DBL_DIG >= 9 5e9, #endif #if DBL_DIG >= 8 5e8, #endif #if DBL_DIG >= 7 5e7, #endif #if DBL_DIG >= 6 5e6, #endif #if DBL_DIG >= 5 5e5, #endif #if DBL_DIG >= 4 5e4, #endif #if DBL_DIG >= 3 5e3, #endif #if DBL_DIG >= 2 5e2, #endif #if DBL_DIG >= 1 5e1, #endif #if DBL_DIG >= 0 5e0, #endif }; /**************************************************************************** * Public Functions ****************************************************************************/