преобразование наносекунд в секунды и наносекунды

У меня есть очень большое значение наносекунды (представляющее наносекунды с эпохи), которое я пытаюсь разбить на секунды, начиная с эпохи и наносекунд:

uint64_t nanosecondsEpoch;
unsigned secs = nanosecondsEpoch / 1000000000ULL;
unsigned nanos = nanosecondsEpoch - (secs * 1000000000ULL);

проблема заключается в том, если я попытаюсь сшить его обратно так:

uint64_t stichBack = secs * 1000000000ULL + nanos

Я получаю что-то, что далеко. Я думаю, что причина в том, что когда я выполняю деление, я получаю 1357314854.03 за секунды, а 0.03 сбрасывается (что приводит к большому расхождению) … но я сбит с толку, потому что такое ощущение, что я должен быть в состоянии сохранить обе части информации в неподписанный и восстановить информацию, не прибегая к поплавкам? Я делаю что-то глупое в арифметике, которое не могу уловить?

Вот конкретный пример:

значение для наносекунд с эпохи somtime сегодня утром: 1357314854032484000

Я бы использовал uint64_t, если бы мог и для секунд, и для наносекунды без знака, но мне интересно, почему я не могу разбить вышеуказанное значение, как указано выше, и собрать его обратно.

0

Решение

поскольку 1e9 меньше чем 2^32-1 (максимальное 32-разрядное целое число без знака), если исходное значение достаточно велико, частное может все еще быть слишком большим, чтобы поместиться в 32-разрядное целое число. Не уверен, каково ваше первоначальное значение, но возможно, вы обрезаете secs значение в результате.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]