在C语言中使用浮点扩展代码时,我发现涉及pow(double,double)
函数的表达式的时间突然激增。我不明白为什么传递给pow()
函数的特定数字会导致执行时间突然激增,尽管这些值连续变化且每个值之间的差值在0.00001或更小。该表达式类似于(在内核模块中,在定制Linux上进行硬实时):
dbl_type_var0连续不断地以约300.000的循环循环进给,并以1.0的顺序递增,或者以小数点后的1到3递增,例如300.0,300.1,301.003,301.5,302.0,303.1,303.2等,这是从另一个函数计算得出的。 / p>
double_type_var2 = 1005.0;
dbl_type_var4 = 34.1/6.15;
double_type_var1 = double_type_var2*pow(dbl_type_var0/303.15,dbl_type_var4);
浮点处理器可用,并使用RTOS专用线程api启用了fp,以为相应线程(即pthread_setfp_np(pthread_handle,bool_enable_disable)
)启用fp硬件。
在平台上上述表达式的情况下,使用硬件计时器测量的执行时间是不存在尖峰时执行时间的5倍左右。在剩余时间内,即其他值小于1毫秒。这种特定的功能或代码行导致计时问题。
我需要帮助解决此问题或了解其背后的原因。 我已启用浮点异常,并且此特定代码行未引起任何异常。对于相同功能的连续变化值,处理器/浮点硬件执行时间是否随机变化?
预先感谢