出于性能原因,我正在C中重新实现Matlab函数。现在,我正在寻找最有效的方法来计算向量投影到单位框上。
用C语言,我想计算
double i = somevalue;
i = (i > 1.) ? 1. : i;
i = (i < -1.) ? -1. : i;
因为我必须做几百万次这个操作,我想知道什么是最有效的方法来实现这一点。
答案 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来并行化代码,从而加快代码速度。