Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  ryu_common.h

  Sprache: C
 

/*---------------------------------------------------------------------------
 *
 * Common routines for Ryu floating-point output.
 *
 * Portions Copyright (c) 2018-2025, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
 *   src/common/ryu_common.h
 *
 * This is a modification of code taken from github.com/ulfjack/ryu under the
 * terms of the Boost license (not the Apache license). The original copyright
 * notice follows:
 *
 * Copyright 2018 Ulf Adams
 *
 * The contents of this file may be used under the terms of the Apache
 * License, Version 2.0.
 *
 *     (See accompanying file LICENSE-Apache or copy at
 *      http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Alternatively, the contents of this file may be used under the terms of the
 * Boost Software License, Version 1.0.
 *
 *     (See accompanying file LICENSE-Boost or copy at
 *      https://www.boost.org/LICENSE_1_0.txt)
 *
 * Unless required by applicable law or agreed to in writing, this software is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.
 *
 *---------------------------------------------------------------------------
 */

#ifndef RYU_COMMON_H
#define RYU_COMMON_H

/*
 * Upstream Ryu's output is always the shortest possible. But we adjust that
 * slightly to improve portability: we avoid outputting the exact midpoint
 * value between two representable floats, since that relies on the reader
 * getting the round-to-even rule correct, which seems to be the common
 * failure mode.
 *
 * Defining this to 1 would restore the upstream behavior.
 */

#define STRICTLY_SHORTEST 0

#if SIZEOF_SIZE_T < 8
#define RYU_32_BIT_PLATFORM
#endif

/*  Returns e == 0 ? 1 : ceil(log_2(5^e)). */
static inline uint32
pow5bits(const int32 e)
{
 /*
  * This approximation works up to the point that the multiplication
  * overflows at e = 3529.
  *
  * If the multiplication were done in 64 bits, it would fail at 5^4004
  * which is just greater than 2^9297.
 */

 Assert(e >= 0);
 Assert(e <= 3528);
 return ((((uint32) e) * 1217359) >> 19) + 1;
}

/*  Returns floor(log_10(2^e)). */
static inline int32
log10Pow2(const int32 e)
{
 /*
  * The first value this approximation fails for is 2^1651 which is just
  * greater than 10^297.
 */

 Assert(e >= 0);
 Assert(e <= 1650);
 return (int32) ((((uint32) e) * 78913) >> 18);
}

/*  Returns floor(log_10(5^e)). */
static inline int32
log10Pow5(const int32 e)
{
 /*
  * The first value this approximation fails for is 5^2621 which is just
  * greater than 10^1832.
 */

 Assert(e >= 0);
 Assert(e <= 2620);
 return (int32) ((((uint32) e) * 732923) >> 20);
}

static inline int
copy_special_str(char *const result, const bool sign, const bool exponent, const bool mantissa)
{
 if (mantissa)
 {
  memcpy(result, "NaN"3);
  return 3;
 }
 if (sign)
 {
  result[0] = '-';
 }
 if (exponent)
 {
  memcpy(result + sign, "Infinity"8);
  return sign + 8;
 }
 result[sign] = '0';
 return sign + 1;
}

static inline uint32
float_to_bits(const float f)
{
 uint32  bits = 0;

 memcpy(&bits, &f, sizeof(float));
 return bits;
}

static inline uint64
double_to_bits(const double d)
{
 uint64  bits = 0;

 memcpy(&bits, &d, sizeof(double));
 return bits;
}

#endif       /* RYU_COMMON_H */

Messung V0.5 in Prozent
C=99 H=94 G=96

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=738142