Я сравниваю значения из обычных арифметических чисел с плавающей запятой c и использую высокоточное число MPFR в качестве базовой линии. При печати я не понимаю, почему следующий код выводится по-другому.
Документация MPFR говорит, что спецификаторы вывода:
'a' 'A' шестнадцатеричное число с плавающей запятой, стиль C99 "
Итак, я предполагаю, что он печатает так же, как printf
. Однако это не так:
#include <boost/multiprecision/mpfr.hpp>
#include <mpfr.h>
using namespace boost::multiprecision;
int main (int argc, char* argv[])
{
double a = 254.5;
mpfr_float_1000 mpfr_a = 254.5;
mpfr_t t;
mpfr_init2(t, 3324); // 1000 decimal precision
mpfr_set_d(t, a, MPFR_RNDN);
printf("double:\t%a\n", a);
mpfr_printf("mpfr_t:\t%RNa\n", t);
mpfr_printf("boost:\t%RNa\n", mpfr_a);
}
Выводит:
double: 0x1.fdp+7
mpfr_t: 0xf.e8p+4
boost: 0xf.e8p+4
Это не огромный сделка, потому что sscanf
анализирует их как одно и то же значение, но я не смог найти никакой документации, объясняющей, почему они разные.
Какой из них канонический?