Tag: 精确

正弦结果取决于所使用的C ++编译器

我使用以下两个C ++编译器: cl.exe :适用于x86的Microsoft(R)C / C ++优化编译器版本19.00.24210 g ++ :g ++(Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 当使用内置的正弦函数时,我得到不同的结果。 这并不重要,但有时候结果对我的使用来说太重要了。 这是一个“硬编码”值的例子: printf("%f\n", sin(5451939907183506432.0)); 结果与cl.exe: 0.528463 用g ++的结果: 0.522491 我知道g ++的结果更准确,我可以使用额外的库来得到相同的结果,但这不是我的观点。 我真的很明白这里发生了什么事情: cl.exe为什么错了? 有趣的是,如果我在param上应用模(2 * pi),那么我得到的结果与g ++相同。 [编辑]只是因为我的例子看起来疯了你们中的一些人:这是一个伪随机数发生器的一部分。 知道正弦的结果是否准确并不重要,我们只是需要它来给出一些结果。

使用clock()函数调度任务时发出

我想在不同的时间间隔安排任务:在0.1秒,0.9s …. 2s等我使用clock()C ++函数,返回自仿真开始以来的滴答数,我将滴答数转换为秒使用CLOCKS_PER_SEC,但我注意到,该任务是不是计划时,即时是一个浮动,但是当它是一个整数它没有。 这里负责调度的部分代码: float goal = (float) clock() / CLOCKS_PER_SEC + 0.4 ; // initially (float) clock() / CLOCKS_PER_SEC = 0 ; if ((float) clock() / CLOCKS_PER_SEC == goal) do stuff ; 在这种情况下,它不起作用,但是当我安排在3秒内完成任务,例如它的工作。 这是一个精度问题?