概述
/ sum-of-square * theta, use this trick to avoid a division
t = _mm_mul_ps(_mm_sqrt_ps(_s), _mm_set_ps1(theta)); // float theta = 2 / sqrt(float(dim)); //r0 := r1 := r2 := r3 := w
// - sum-of-square * theta
t2 = _mm_xor_ps(_t, _mm_set1_ps(-0.f));
在最近看的代码里有一段上面这样的运算
先求出t1,再让t1 与 -0 做异或运算 ,得到的t2 是t1 的反数。
c 语言表示如下
float t = 0.123456
float t2 =t1^(-0.0)
看下异或运算的定义
按位异或 若参加运算的两个二进制位值相同则为0,否则为1
也就是说 如果安位与0异或,原值不变,与1异或,原值取反。
float 型第1位是符号位
-0.0 的第1位是1 ,其余位是0.
这样 这个float 和-0.0异或的结果就是第1位取反,其他保持不变。
最后
以上就是温婉康乃馨为你收集整理的float 型变量与 -0.0 做异或运算结果是取反的全部内容,希望文章能够帮你解决float 型变量与 -0.0 做异或运算结果是取反所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复