[英]How to truncate float values in XMM register
如何只获取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
}
使用roundps
是最简单的。 舍入模式表位于其他位置,但您需要舍入模式3(朝向零)。
转换为整数并返回仅在输入保证在某个范围内时才有效(由于平方根,大约为0到4.6e18)。 您可以使用cvttps2dq
和cvtdq2ps
执行此cvtdq2ps
。 这只需要SSE2, roundps
需要SSE4.1。 只有当舍入模式设置为truncate时才能使用cvtps2dq
,通常不是这样,所以你必须更改+恢复它。
有一个SO问题,其中一些答案涉及该主题:
还有一篇论文讨论了浮动到int转换问题,特别提到了第二个答案(没有暗示抄袭)。
主要的Windows编译器(至少)带有可能感兴趣的所谓内在函数(高度优化的内联函数),例如。 MSVC和Intel(浮动到int:p.42; float floor(float)
功能和喜欢:p.135) 。
警告
这是一个研究答案。 我没有亲自使用引用的技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.