Почему MSVC ++ требует std :: setprecision для обеспечения полной точности вывода с помощью std :: hexfloat? - PullRequest
0 голосов
/ 20 января 2019

Насколько я знаю, следующая строка - это все, что требуется для вывода double в шестнадцатеричном формате с полной точностью:

std::cout << std::hexfloat << yourDouble << std::endl;

Но при использовании MSVC ++ в Visual Studio 17 это только печатает двойное число до6 шестнадцатеричных цифр.Смотрите мой код (усечено для ясности):

std::ifstream cacheF(pToFile, std::ios::in);
if (!cacheF.is_open()) {
    std::cerr << "Could not open " << pToFile << "!" << std::endl;
    return 1;
}

bool readSuccess = true;
unsigned long long sumBegin, cached[2];
double previousTime;
readSuccess = readSuccess && (cacheF >> std::dec >> sumBegin);
readSuccess = readSuccess && (cacheF >> std::hexfloat >> previousTime);
for (int i = 0; i < 2; i++) readSuccess = readSuccess && (cacheF >> std::hex >> cached[i]);

cacheF.close();

if (!readSuccess) {
    std::cerr << "Cache reload failed due to improper file formatting!" << std::endl;
}

std::cout << std::hexfloat << previousTime << std::endl;
std::cout << std::setprecision(13) << std::hexfloat << previousTime << std::endl;

Входной файл выглядит следующим образом:

1045644800006
0x1.567be0370cdc8p+7
C6CCFEDA2563B0D1
5E3492440B4BE8B2

Вывод:

0x1.567be0p+7
0x1.567be0370cdc8p+7

Уже давноВ последний раз я пытался сделать это с GCC, но, если я правильно помню, он выдает полный вывод с двойной точностью, не требуя установки точности.Может ли кто-нибудь подтвердить, является ли это специфическим поведением для MSVC ++, и почему?

1 Ответ

0 голосов
/ 20 января 2019

Поскольку вывод hexfloat должен игнорировать точность и выводить полное значение, это будет ошибкой компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...