我正在尝试更正MISRA违规“441-Float cast to non Float”,该违规发生在以下代码中:

tULong frames = (tULong)(runTimeSeconds * 40.0f);

runTimeSeconds是afloat,显然40.0f被指定为afloat。有什么想法吗?

最佳答案

<math.h>有一个很好的函数家族,可以在一个调用中循环和转换。不需要将转换从float转换为tULong。下面有一个(tULong)强制转换来处理整数到整数的转换,该转换可能会根据范围和tULong详细信息的未登录问题而消除。

#include <math.h>
// long int lrintf(float x);
// long long int llrint(double x);
// 4 others

tULong frames = (tULong) llrintf(runTimeSeconds * 40.0f);

这种循环而不是像OP的原始代码那样截断。

08-25 06:39