ТипдефПоплавок#_t, с # замененной шириной, обозначает тип плавающей точки точно # битов. Например,float32_tобозначает одноточный тип с плавающей точкой с приблизительно 7 десятичными цифрами точности (эквивалент бинарным 32 вIEEE_floating_point).
Типы плавающих точек в C и C++ должны иметь (необязательно) специфичные для реализации ширины и форматы. Однако, если платформа поддерживает базовые типы с плавающей точкойIEEE_floating_pointс шириной 16, 32, 64, 80, 128 бит или любую их комбинацию, то<бустер/cstdfloatcstdfloat.hpp>typedefsfloat16_t,float64_t,float80_t,float128_t,их соответствующие наименее и быстрые типы и соответствующий тип максимальной ширины.
Определение (или нет) макросапостоянной плавающей точкиявляется способом проверки наличия на платформеопределенной ширины плавающей точки.
#if defined(BOOST_FLOAT16_C)
#endif
#if defined(BOOST_FLOAT32_C)
#endif
#if defined(BOOST_FLOAT64_C)
#endif
#if defined(BOOST_FLOAT80_C)
#endif
#if defined(BOOST_FLOAT128_C)
#endif
Это можно использовать для написания кода, который будет компилироваться и запускаться (хотя и по-разному) на нескольких платформах. Без этих тестов, если ширина, скажемfloat128_tне поддерживается, то компиляция будет неудачной. (Конечно, редкоfloat64_tилиfloat32_tне поддерживаются).
Количество битов только в значении и может быть определено с помощью:
std::numeric_limits<boost::floatmax_t>::digits
и из этого можно смело вывести общее количество битов, потому что тип должен быть форматом IEEE754,std::numeric_limits<boostfloatmax_t>::floatmax_t==true, так, например, еслиstd::boost::floatmax_t>::floatmax_t, тоfloatmax_tдолжен бытьfloat128_t.
Общеечисло битов с использованиемfloatmax_tможно найти таким образом:
const int fpbits =
  (std::numeric_limits<boost::floatmax_t>::digits == 113) ? 128 :
  (std::numeric_limits<boost::floatmax_t>::digits == 64) ? 80 :
  (std::numeric_limits<boost::floatmax_t>::digits == 53) ? 64 :
  (std::numeric_limits<boost::floatmax_t>::digits == 24) ? 32 :
  (std::numeric_limits<boost::floatmax_t>::digits == 11) ? 16 :
  0; 
 std::cout << fpbits << " bits." << std::endl;
и число «гарантированных» десятичных цифр с использованием
std::numeric_limits<boost::floatmax_t>::digits10
и максимальное число возможно значимых десятичных цифр с использованием
std::numeric_limits<boost::floatmax_t>::max_digits10
![[Tip]](/img/tip.png)  | 
Tip | 
max_digits10не всегда поддерживается, но может быть вычислена во время компиляции с использованием формулы Кахана,2+двоичные_digits*0.3010, которые могут быть вычисленыво время компиляциииспользуя2+двоичные_цифры*3010/10000.
  | 
 
![[Note]](/img/note.png)  | 
Note | 
| 
 Можно проверить, что 
std::is_same::value == true 
Но это не будет компилироваться на платформе, гдебустер::float128_tне определено. Так что лучше использовать MACRO.BOOST_FLOATnn_C. 
 |