繁体   English   中英

如何截断XMM寄存器中的浮点值

[英]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)。 您可以使用cvttps2dqcvtdq2ps执行此cvtdq2ps 这只需要SSE2, roundps需要SSE4.1。 只有当舍入模式设置为truncate时才能使用cvtps2dq ,通常不是这样,所以你必须更改+恢复它。

有一个SO问题,其中一些答案涉及该主题:

还有一篇论文讨论了浮动到int转换问题,特别提到了第二个答案(没有暗示抄袭)。

主要的Windows编译器(至少)带有可能感兴趣的所谓内在函数(高度优化的内联函数),例如。 MSVCIntel(浮动到int:p.42; float floor(float)功能和喜欢:p.135)

警告

这是一个研究答案。 我没有亲自使用引用的技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM