我在代码中有以下语句:
int a = (int)( (float)(b * 1000) / (float)c + .5f );
Run Code Online (Sandbox Code Playgroud)
在哪里b也是int,并且c是一个unsigned int具有常数值(在我的测试运行中为15)
这个语句在while循环中b,每次迭代时都会增加1.
这段代码工作正常,直到我决定在Visual Studio中打开优化标志(最大化速度).之后,a会随机进入溢出(即它的值为-2147483647).在进一步研究这种溢出曾经发生在不同的值b.在我观察到的测试运行中,溢出发生的b值在9-12之间.
解决问题的方法是进行如下图所示的小改动:
int a = (int)( (b * 1000.f) / c + .5f );
Run Code Online (Sandbox Code Playgroud)
关于这是如何帮助的任何想法?它工作正常,但我不知道为什么?
编辑:根据评论添加更多信息:
在记录时,我观察到:
(float)(b * 1000) / (float)c + .5f
被评估为一个非常大的值,当类型转换int为导致溢出时.独立,float(b*1000)并float(c)正在正确计算不过.
我有一个非常奇怪的要求.我有一个可执行文件系统调用python脚本就像py file1.py现在,在我的系统中虽然py显示为无法识别的内部或外部命令.然而,python file1.py有效.
有什么方法我可以让我的Windows命令提示符识别py和python引用相同的东西?
如果我的窗口有"永远在线"的扩展样式集,我希望它在所有没有"Always on top"样式集的窗口之上,以及那些具有"Always on top"样式集的窗口但是在我的窗口被激活之前被激活了.
要测试此功能,我打开任务管理器窗口 - 将其设置为始终在顶部,然后打开我的窗口(myWindow).
在Windows 7中,我观察到了预期的行为 - myWindow来自任务管理器.
但是,在Windows 10中,情况并非如此.任务管理器"始终位于其他窗口的顶部",即使这些窗口本身具有"始终在线"样式集.
他们在Windows 10中的任务管理器有什么特别之处吗?如果是,是否有一些工作可以将我的窗口置于任务管理器之上?我试过简单地使用该BringWindowToTop功能,但这不起作用.无论是不setWindowPos与HWND_TOP作为一个值hWndInsertAfter的论点.
我的应用程序创建了多个窗口,我想在这些窗口之间强制执行Z顺序,即,如果两个窗口碰巧重叠,则应在具有较低优先级的窗口上绘制具有较高优先级的窗口.
我使用GetWindow函数将不同(不可见/可见)窗口的句柄移动到窗口.我想知道我的应用程序是否创建了此函数返回的特定窗口.有关如何获取该信息的任何想法?
当我们调用std::list还带有标记的类型的变量clear时会发生什么thread_local?它会放弃分配的内存吗?
在我的场景中,我有一个thread_local列表,该列表在一次迭代中填充,并在迭代结束时清除。thread_local在我们在迭代结束时放弃内存(并且必须在下一次迭代中再次分配内存)的情况下,这不是很有用吗?