我真的浪费了很多时间来解决代码中的问题。 现在它正在运作,但我不明白出了什么问题。
使用QT5 / gcc
int pos;
uint m_endZeit, m_startZeit;
float secPerPx = (pos * (m_endZeit - m_startZeit)) / static_cast<float>(width());
uint a = secPerPx + m_startZeit;
uint b = static_cast<uint>(secPerPx) + m_startZeit;
std::cout << a << " vs. " << b << std::endl;
输出:
1404809856 vs. 1404809893
任何人都可以向我解释这个吗?为什么这不一样?
答案 0 :(得分:3)
What range of numbers can be represented in a 16-, 32- and 64-bit IEEE-754 systems?
浮点数的精度大约为8-9位,你已经有10位数。
uint a = secPerPx + m_startZeit;
上面的代码首先将m_startZeit强制转换为float,添加2个值,然后将其强制转换为Integer。
uint b = static_cast<uint>(secPerPx) + m_startZeit;
这将浮动转换为整数,然后才将它们加在一起。