c++ - 为什么我通过转换值得到不同的结果

标签 c++ casting

我真的浪费了很多时间来解决我的代码中的问题。 现在它可以工作了,但我不明白哪里出了问题。

使用 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/

相关文章:

python - Python 中的自动字符串到数字转换

java - 为什么 Java 的列表有 "List.toArray()",而数组没有 "Array.toList()"?

c++ - Visual Studio 2010 Express Edition 中的 "Cannot open include file: ' ofstream '"错误?

C++ 将字符串类型变量中的单词转换为小写

c++ - 运行线程

java - 有没有办法使用字符串来转换为类型

c# - 将 object[] 类型转换为泛型类型 K,它也是一个数组

python - 在嵌入 C++ 程序的 python 脚本中使用 matplotlib 时出错

c++ - 我必须删除 C++ 中的静态数组吗?

c# - 将 ComponentRegistration 向下转换为非泛型类型