zoukankan      html  css  js  c++  java
  • sse float 转int 截断和不截断

    之前, 我用sse指令, 想把float 型转成int, 不过其中遇到了一些困惑,就是截断和不截断的问题, 这个问题一直困扰我好集体, 最后终于解决了, 原来sse本身就有截断和不截断的指令。

    _mm_cvtps_epi32 是SSE2的一条指令CVTPS2DQ。在MSDN上的解释是

    Converts the four single-precision, floating-point values of a to signed 32-bit integer values.

    把四个float变量强转为四个int变量。其中需要注意的是他的截断规则:四舍五入,在进位后末位是偶数的进,否则不进位。

    紧接着是另一个指令_mm_cvttps_epi32, Converts the four single-precision, floating-point values of a to signed 32-bit integer values using truncate。

    这里就多了using truncate,意思是直接截断。与C/C++中的 r = (int)a 一样。使用它们时候要注意哦。

     

     __m128 test1 = _mm_set_ps(3.4f, 3.5f, 3.6f, 4.5f);

     __m128i test2 = _mm_cvtps_epi32(test1);

     __m128i test3 = _mm_cvttps_epi32(test1);

     

    test2 结果是: 3,4,4,4;

    test3 结果是: 3,3,3,4;


  • 相关阅读:
    linux命令备忘
    java搭建finagle(2)
    记一次Time-Wait导致的问题
    读loadBalance技术的一些笔记
    Immutable.js尝试(node.js勿入)
    python flask 部署
    一个奇怪的html上url参数问题
    xxx-servlet.xml vs applicationContext.xml
    大数据环境安装部署步骤
    数据迁移
  • 原文地址:https://www.cnblogs.com/james1207/p/3395345.html
Copyright © 2011-2022 走看看