Сложение между Integer и Float …., что приводит к нулю

Я делал операцию в C ++ над структурой таймера Linux, предоставленной интерфейсом «Clock_gettime (CLOCK_MONOTONIC, &Текущее время)»

#include <iostream>
#include <time.h>

int main()
{
struct timespec CurrentTime;
CurrentTime.tv_sec = 28220;
CurrentTime.tv_nsec = 461189000;

unsigned long long TimeNow;
TimeNow = (28220 * 1000000) + (461189000 * 0.001);

std::cout << TimeNow;
}

но результат всегда дает TimeNow как ноль.

Я был бы признателен, если у кого-либо есть ответ на этот вопрос или руководство для подражания.
Это было сделано с помощью компилятора GCC

Код Snipped можно найти здесь
http://rextester.com/XRR83683

-5

Решение

В соответствии:

TimeNow = (28220 * 1000000) + (461189000 * 0.001);

(28220 * 1000000) часть рассчитывается с использованием intс, и (с 32-разрядным int) переполняется, давая неправильное значение (вероятно, -1844771072).

(461189000 * 0.001) часть рассчитывается с использованием doubleс, из-за 0.001 двойная константа, давая 461189.0 как double,

Два затем складываются вместе, давая отрицательный double значение … когда это отрицательное double преобразуется в unsigned long long для назначения TimeNow, он конвертируется как 0, вероятно, потому что это самое близкое значение в его диапазоне к любому отрицательному числу. Это отличается от преобразования отрицательного целочисленного типа в unsigned, который будет «обтекать».

0

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

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

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