30 unsigned int float_control;
37 unsigned int reset_cw;
57 _requires_reset =
false;
62 _requires_reset =
true;
105template <
typename FloatingType>
107 FloatingType
const value,
111 char*
const mantissa_buffer,
112 size_t const mantissa_buffer_count
118 _ASSERTE(mantissa_buffer_count > 0);
126 bool const is_denormal = value_components._exponent == 0;
128 uint64_t const mantissa_adjustment = is_denormal
130 :
static_cast<uint64_t>(1) << (floating_traits::mantissa_bits - 1);
132 int32_t const exponent_adjustment = is_denormal
139 uint64_t const f = value_components._mantissa + mantissa_adjustment;
141 static_cast<int32_t>(value_components._exponent) -
142 floating_traits::exponent_bias -
143 floating_traits::mantissa_bits +
155 _ASSERTE((
"unexpected input value; log10 failed", 0));
180 if (
e == floating_traits::minimum_binary_exponent ||
202 char* mantissa_it = mantissa_buffer;
214 if (initial_digit == 10)
217 *mantissa_it++ =
'1';
223 else if (initial_digit == 0)
231 *mantissa_it++ =
static_cast<char>(
'0' + initial_digit);
243 char*
const mantissa_last = mantissa_buffer +
__min(mantissa_buffer_count - 1, required_digits);
248 bool unwritten_nonzero_digits_in_chunk =
false;
251 if (mantissa_it == mantissa_last)
265 uint32_t const digits_per_iteration = 9;
266 uint32_t const digits_per_iteration_multiplier = 1000 * 1000 * 1000;
268 multiply(
r, digits_per_iteration_multiplier);
271 _ASSERTE(quotient < digits_per_iteration_multiplier);
275 #pragma warning(suppress: 6293)
278 char const d =
static_cast<char>(
'0' + quotient % 10);
284 if (
static_cast<uint32_t>(mantissa_last - mantissa_it) <=
i)
288 unwritten_nonzero_digits_in_chunk =
true;
297 mantissa_it +=
__min(digits_per_iteration, mantissa_last - mantissa_it);
305 bool const all_zeros_after_chunk =
is_zero(
r);
307 if (all_zeros_after_chunk && !unwritten_nonzero_digits_in_chunk)
321 size_t const result_count
327 scoped_fp_state_reset
const reset_fp_state;
334 unsigned int float_control;
351 switch (classification)
static __forceinline __acrt_has_trailing_digits __cdecl convert_to_fos_high_precision(FloatingType const value, uint32_t const precision, __acrt_precision_style const precision_style, int *const exponent, char *const mantissa_buffer, size_t const mantissa_buffer_count)
__acrt_has_trailing_digits __cdecl __acrt_fltout(_CRT_DOUBLE value, unsigned const precision, __acrt_precision_style const precision_style, STRFLT const flt, char *const result, size_t const result_count)
unsigned int _original_control_word
fp_control_word_guard(unsigned int const new_control, unsigned int const mask)
fp_control_word_guard(unsigned int const mask=~0u)
scoped_fp_state_reset & operator=(scoped_fp_state_reset const &)
scoped_fp_state_reset(scoped_fp_state_reset const &)
__acrt_has_trailing_digits
__acrt_fp_class __cdecl __acrt_fp_classify(double const &value)
int __cdecl fesetenv(const fenv_t *)
int __cdecl feholdexcept(fenv_t *)
int __cdecl fegetenv(fenv_t *envp)
result_buffer_count char *const _In_ int const _In_ bool const _In_ unsigned const _In_ STRFLT const _In_ bool const _Inout_ __crt_cached_ptd_host &ptd throw()
floating_traits::components_type components_type
GLdouble GLdouble GLdouble r
GLenum GLenum GLuint components
GLenum GLint GLint * precision
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
_Check_return_ _CRTIMP double __cdecl ceil(_In_ double x)
_CRT_MANAGED_FP_DEPRECATE _ACRTIMP errno_t __cdecl _controlfp_s(_Out_opt_ unsigned int *_CurrentState, _In_ unsigned int _NewValue, _In_ unsigned int _Mask)
#define strcpy_s(d, l, s)
__forceinline bool __cdecl is_zero(big_integer const &value)
__forceinline big_integer __cdecl make_big_integer(uint64_t const value)
uint64_t __cdecl divide(big_integer &numerator, big_integer const &denominator)
__forceinline bool __cdecl multiply(big_integer &multiplicand, uint32_t const multiplier)
__forceinline bool __cdecl multiply_by_power_of_ten(big_integer &x, uint32_t const power)
__forceinline bool __cdecl shift_left(big_integer &x, uint32_t const n)
__forceinline big_integer __cdecl make_big_integer_power_of_two(uint32_t const power)