|
|
1
4
SSE ops将微妙地改变该算法的行为,因为它们没有中间的80位表示——数学实际上是在32位或64位中完成的。好消息是,您可以通过简单地将/ARCH:SSE2命令行选项指定给MSVC,轻松地测试它并查看它是否会改变结果,这将导致它使用SSE标量运算,而不是x87 FPU指令进行普通浮点运算。 我不确定整数边界周围的精确舍入行为是什么,但您可以测试看看当1.999..时会发生什么。。从64位四舍五入到32位 如
编辑,结果: 原始海报运行了此测试,发现通过截断,1.99999在有/无/arch:SSE2的情况下将取整为2。 |
|
|
2
0
如果调整舍入,使其包含范围的两端,那么这些极值的可能性是否仅为任何非极值的一半? |
|
|
3
0
使用截断,永远不会包含最大值。 你确定你真的需要max吗?从字面上看,你几乎没有机会准确地降落在最大点上。
编辑:改进的算法 |