Tag: math

Newton Raphson与SSE2 – 有人可以解释我这3行

我正在阅读这份文件: http : //software.intel.com/en-us/articles/interactive-ray-tracing 我偶然发现了这三行代码: SIMD版本已经快了很多,但我们可以做得更好。 英特尔为SSE2指令集添加了快速1 / sqrt(x)函数。 唯一的缺点是它的精度有限。 我们需要精度,所以我们使用Newton-Rhapson来改进它: __m128 nr = _mm_rsqrt_ps( x ); __m128 muls = _mm_mul_ps( _mm_mul_ps( x, nr ), nr ); result = _mm_mul_ps( _mm_mul_ps( half, nr ), _mm_sub_ps( three, muls ) ); 此代码假定存在名为“half”(四次0.5f)和变量“three”(四次3.0f)的__m128变量。 我知道如何使用Newton Raphson计算函数的零,我知道如何使用它来计算数字的平方根,但我只是看不出这个代码如何执行它。 有人可以向我解释一下吗?

C中的浮点运算是关联的吗?

加法在数学上保持关联属性: (a + b) + c = a + (b + c) 在一般情况下,此属性不适用于浮点数,因为它们表示有限精度的值。 作为优化的一部分,是否允许编译器在从C程序生成机器代码时进行上述替换? 它在C标准中的确切位置在哪里?

在64位中进行组合乘法除法运算的最准确方法是什么?

对于在32位和64位程序(在Visual C ++中)都能工作的64位整数,我能够进行乘法除法运算的最准确方法是什么? (如果溢出,我需要结果mod 2 64. ) (我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序。) 显然,可以进行double和后退,但我想知道是否有更准确的方法并不太复杂。 (即我不是在寻找任意精度的算术库!)

代表双打中的整数

双精度数(给定数量的字节,具有合理的尾数/指数平衡)是否总能完全精确地保持无符号整数范围的一半,即该字节数的一半? 例如,8字节双精度可以完全精确地保持四字节无符号整数的范围吗? 这将归结为如果一个双字节浮点数可以保持一个字节unsigned int的范围。 一个字节的unsigned int当然是0 – > 255。