将矢量投影到单位框上的有效方法

时间:2011-07-05 14:23:51

标签: c++ c math optimization

出于性能原因,我正在C中重新实现Matlab函数。现在,我正在寻找最有效的方法来计算向量投影到单位框上。

用C语言,我想计算

double i = somevalue;
i = (i >  1.) ?  1. : i;
i = (i < -1.) ? -1. : i;

因为我必须做几百万次这个操作,我想知道什么是最有效的方法来实现这一点。

3 个答案:

答案 0 :(得分:2)

如果您使用686,您的编译器可能会将条件转换为CMOV指令,这可能足够快。

有关实验,请参阅问题Fastest way to clamp a real (fixed/floating point) value?@Spat还建议使用MINSS / MINSD和MAXSS / MAXSD指令,这些指令可用作编译器的内在函数。它们是SSE指令,如果您使用686,则可能是您的最佳选择。

答案 1 :(得分:1)

如果您/“编译器”使用IEEE 754双格式,我认为读取双内存的第一位(符号位)可能是最直接的方式。然后你不需要额外的round或除法操作。

答案 2 :(得分:0)

您是否考虑过使用SSE instructions加速代码?

此外,您可以使用OpenMP来并行化代码,从而加快代码速度。