我真的浪费了很多时间来解决我的代码中的问题。 现在它可以工作了,但我不明白哪里出了问题。
使用 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
谁能给我解释一下?为什么这不一样?
最佳答案
What range of numbers can be represented in a 16-, 32- and 64-bit IEEE-754 systems?
float 的精度大约为 8-9 位,而您已经有 10 位了。
uint a = secPerPx + m_startZeit;
上面的代码首先将 m_startZeit 转换为 float ,将 2 个值相加,然后将其转换回整数。
uint b = static_cast<uint>(secPerPx) + m_startZeit;
这是在将 float 加在一起之前将 float 转换为整数。
关于c++ - 为什么我通过转换值得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628515/