| /**************************************************************************** |
| * 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 |
| ****************************************************************************/ |