谁能告诉我为什么输出如此奇怪?

标签 c

我希望我的输出是

0----2----4----6----8----1----1----1----1

但我不断得到

0----2----------------------------------

基本上我想以 0.4 为增量从 0 数到 16。这是我的代码:

int
main(int argc, char *argv[]) {
    double x;
    for( x = 0.0; x<= 16.0; x = x + 0.4){

        if( fmod(x,2.0) == 0){
            if(x< 10){
                printf("%.0f",x);
            }

            if(x >= 10){
                printf("%.0f",x/10);
            }
        }

        else{
            putchar('-');
        }
    }

    printf("\n");


    return 0;
}

最佳答案

您的问题是由于浮点精度造成的,并尝试在此处进行精确比较:

if (fmod(x,2.0) == 0)

使用整数,或使用“epsilon”测试:

epsilon = 0.000001;
if (fabs(fmod(x,2.0)) < epsilon)

关于谁能告诉我为什么输出如此奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716274/

相关文章:

c - 当我使用 valgrind 运行这段代码时,它的执行方式与我在没有 valgrind 的情况下运行它时的执行方式不同

c++ - __do_global_ctors_aux 未显示在 objdump 中

c - 数组到c中的参数

c - 为什么当我再声明一个变量时这段代码会崩溃?

C 结构 self free

c - 使用malloc两次后为"A heap has been corrupted"

C 指针和以下函数

c++ - 让子窗口继承父背景颜色?

你能把 "pointer to a function pointer"转换到 void*

c++ - 在 Linux 中获取当前进程创建时间