Невозможно выполнить двоичный файл на сервере Linux [закрыто]

Решение Decimal64 с плавающей точкой - лучшее, но оно требует некоторой магии программирования с анонимными объединениями. Чтобы преобразовать decimal64 в std :: string, вы должны использовать объединение (предположим, что у него есть имя S) с двумя членами, входом decimal :: decimal64 и выходом uint64_t (из C ++ 99 cstdint.h). Поскольку это объединение имеет член decimal :: decimal64, который является классом C ++ и требует определяемых пользователем конструктора и деструктора, необходимо использовать оператор нового размещения, чтобы установить значение входного члена и вызвать изменение в выходном значении члена.

Кроме того, программист должен инициализировать объект S, например, именованные данные, как это: S data = {12345678987654321ULL}, чтобы компилятор не удалял объект объединения за кулисами. Чтобы еще больше усложнить ситуацию, decimal / decimal.h не определяет встроенный конструктор, inline decimal64 :: decimal64 (decimal64 __r). Наконец, пользователь должен написать глобальный оператор ostream << для decimal64.

Чтобы упростить себе жизнь, сегодня я использовал uint64_t для обозначения количества наносекунд из сегодняшней эпохи Windows. Этот выбор исправил мои ошибки числового переполнения int64_t.

Компромисс между uint64_t и decimal64 заключается в том, что decimal64 имеет гораздо больший динамический диапазон, чем uint64_t. Кроме того, printf для uint64_t требует специального спецификатора формата:

   #include <inttypes.h>
    uint64_t t;
    printf("%" PRIu64 "\n", t);

Пожалуйста, дайте мне знать, если у вас есть вопросы или вам нужен образец кода.

0
29.11.2012, 06:31
0 ответов

Теги

Похожие вопросы