Double 不在 C 中存储数字(数字是否太小)

R0ck

这是我的问题,我需要计算 ms 中有多少个时钟周期,我们的 pll 在 TM4C123 上等待。然而,这些值在我的 double 中显示为零,使我的其他值不正确。任何帮助将非常感激。

#include <stdio.h>

int main()
{
    float ms_cycled;
    float us_cycled;
    int ms_cycle;
    int us_cycle;
    unsigned long MHz = 50;
    double TPC = 1/(MHz*10000000); //calculate time per clock cycle

    //calculate cycles for ms
    ms_cycled = 0.001/TPC;
    ms_cycle = ms_cycled;
    //calculate cycles for us
    us_cycled = 0.000001/TPC;
    us_cycle = us_cycled;
    printf("TPC = %.16f \n", TPC);
    printf("ms_cycled = %f \n", ms_cycled);
    printf("us_cycled = %f \n", us_cycled);
    printf("ms_cycle = %i \n", ms_cycle);
    printf("us_cycle = %i \n", us_cycle);
    return 0;
}

我得到的输出是:

TPC = 0.0000000000000000                                                                                                                             
ms_cycled = inf                                                                                                                                      
us_cycled = inf                                                                                                                                      
ms_cycle = -2147483648                                                                                                                               
us_cycle = -2147483648
臭虫
double TPC = 1/(MHz*10000000);

请注意,您使用的是整数算术所以,你得到1/(50*10000000)= 1/500000000= 0(类型的unsigned long)。unsigned longto投射零double只会给你0.0,而不是正确的结果。

将操作数之一更改为浮点算术应该可以解决问题:

double TPC = 1.0/(MHz*10000000.0)
              ^^              ^^

您也可以为相同的结果更改此设置:

double MHz = 50.0;
               ^^

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章