如何只获取float的整数部分?所以,我有一个浮点数组:x [4] = {5.0,13.0,25.0,41.0};我把它放在xmm0然后我就制作了它的sqrt。我还需要一个命令来帮助只占用这个sqrt的int部分。例如,5的sqrt将是2.236068,我在答案中只需要2.0 代码:
__asm
{
movups xmm0, x
sqrtps xmm0, xmm0
//here need some command
movups x, xmm0
}
答案 0 :(得分:5)
使用roundps
是最简单的。舍入模式表位于其他位置,但您需要舍入模式3(朝向零)。
转换为整数并返回仅在输入保证在某个范围内时才起作用(由于平方根,大约为0到4.6e18)。您可以使用cvttps2dq
和cvtdq2ps
执行此操作。这只需要SSE2,roundps
需要SSE4.1。只有当舍入模式设置为截断时才能使用cvtps2dq
,通常不是这样,因此您必须更改+恢复它。
答案 1 :(得分:3)
有一些SO question的答案解决了这个话题:
还有一个paper讨论了浮点到转换问题,特别提到了第二个答案(没有暗示抄袭)。
主要的Windows编译器(至少)带有可能感兴趣的所谓内在函数(高度优化的内联函数),例如。 MSVC和Intel (float to int: p. 42; float floor(float)
function and likes: p. 135)。
<强>买者强>
这是一个研究答案。我没有亲自使用引用的技术。