@@ -261,10 +261,10 @@ static inline double_with_bit_access get_bit_access(double x)
261
261
return dwba ;
262
262
}
263
263
264
- static inline int get_sign (double x )
264
+ static inline int get_sign_bit (double x )
265
265
{
266
266
// The sign is stored in the highest bit
267
- return get_bit_access (x ).U >> (DOUBLE_SIZE_IN_BITS - 1 );
267
+ return ( int ) ( get_bit_access (x ).U >> (DOUBLE_SIZE_IN_BITS - 1 ) );
268
268
}
269
269
270
270
static inline int get_exp2 (double_with_bit_access x )
@@ -358,7 +358,7 @@ static inline output_gadget_t discarding_gadget()
358
358
static inline output_gadget_t buffer_gadget (char * buffer , size_t buffer_size )
359
359
{
360
360
printf_size_t usable_buffer_size = (buffer_size > PRINTF_MAX_POSSIBLE_BUFFER_SIZE ) ?
361
- PRINTF_MAX_POSSIBLE_BUFFER_SIZE : buffer_size ;
361
+ PRINTF_MAX_POSSIBLE_BUFFER_SIZE : ( printf_size_t ) buffer_size ;
362
362
output_gadget_t result = discarding_gadget ();
363
363
if (buffer != NULL ) {
364
364
result .buffer = buffer ;
@@ -539,9 +539,13 @@ static void print_integer(output_gadget_t* output, printf_unsigned_value_t value
539
539
540
540
#if (PRINTF_SUPPORT_DECIMAL_SPECIFIERS || PRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS )
541
541
542
+ // Stores a fixed-precision representation of a double relative
543
+ // to a fixed precision (which cannot be determined by examining this structure)
542
544
struct double_components {
543
545
int_fast64_t integral ;
544
546
int_fast64_t fractional ;
547
+ // ... truncation of the actual fractional part of the double value, scaled
548
+ // by the precision value
545
549
bool is_negative ;
546
550
};
547
551
@@ -561,10 +565,10 @@ static const double powers_of_10[NUM_DECIMAL_DIGITS_IN_INT64_T] = {
561
565
static struct double_components get_components (double number , printf_size_t precision )
562
566
{
563
567
struct double_components number_ ;
564
- number_ .is_negative = get_sign (number );
568
+ number_ .is_negative = get_sign_bit (number );
565
569
double abs_number = (number_ .is_negative ) ? - number : number ;
566
570
number_ .integral = (int_fast64_t )abs_number ;
567
- double remainder = (abs_number - number_ .integral ) * powers_of_10 [precision ];
571
+ double remainder = (abs_number - ( double ) number_ .integral ) * powers_of_10 [precision ];
568
572
number_ .fractional = (int_fast64_t )remainder ;
569
573
570
574
remainder -= (double ) number_ .fractional ;
@@ -654,7 +658,7 @@ static struct double_components get_normalized_components(bool negative, printf_
654
658
}
655
659
else {
656
660
components .fractional = (int_fast64_t ) scaled_remainder ;
657
- scaled_remainder -= components .fractional ;
661
+ scaled_remainder -= ( double ) components .fractional ;
658
662
659
663
components .fractional += (scaled_remainder >= rounding_threshold );
660
664
if (scaled_remainder == rounding_threshold ) {
@@ -765,7 +769,7 @@ static void print_decimal_number(output_gadget_t* output, double number, printf_
765
769
// internal ftoa variant for exponential floating-point type, contributed by Martijn Jasperse <[email protected] >
766
770
static void print_exponential_number (output_gadget_t * output , double number , printf_size_t precision , printf_size_t width , printf_flags_t flags , char * buf , printf_size_t len )
767
771
{
768
- const bool negative = get_sign (number );
772
+ const bool negative = get_sign_bit (number );
769
773
// This number will decrease gradually (by factors of 10) as we "extract" the exponent out of it
770
774
double abs_number = negative ? - number : number ;
771
775
0 commit comments