Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 意外结果,因为浮点减法变为-0.0和+;0_C_Floating Point - Fatal编程技术网

C 意外结果,因为浮点减法变为-0.0和+;0

C 意外结果,因为浮点减法变为-0.0和+;0,c,floating-point,C,Floating Point,在下面的代码中,当我以0.41的形式输入时,我得到的结果是4,这是预期的,但当我以0.15的形式输入时,我得到的结果是3,但它应该是2 我知道原因,因为我的第一个if条件不是真的,这与-0.0和+0.0有关。我无法理解这一切是如何发生的。整个差异是输入为0.41和0.15 #include <stdio.h> #include <math.h> void performMath(float); int count = 0; int main(void){ pr

在下面的代码中,当我以
0.41
的形式输入时,我得到的结果是
4
,这是预期的,但当我以
0.15
的形式输入时,我得到的结果是
3
,但它应该是
2

我知道原因,因为我的第一个
if
条件不是真的,这与-0.0和+0.0有关。我无法理解这一切是如何发生的。整个差异是输入为
0.41
0.15

#include <stdio.h>
#include <math.h>

void performMath(float);
int count = 0;

int main(void){
    printf("Enter dollars\n");
    float userInput = FloatInput(); //FloatInput() is just a method to get user input.
    float* ptr = malloc(sizeof(float));
    float cents = modff(userInput, ptr);
    performMath(cents);
}

void performMath(float f1){
        printf("performMath : %f\n", f1);
    if(f1 <= 0.0){  //It fails in this condition when user input is 0.15.
        printf("Change is: %i\n", count);   
    } else{
        if((f1 - 0.25) >= 0.0){
            f1 = f1 - 0.25;
            count++;
        } else if((f1 - 0.10) >= 0.0){
            f1 = f1 - 0.10;
            count++;
        } else if((f1 - 0.05) >= 0.0){
            f1 = f1 - 0.05;
            count++;
        } else { // Even if I user "else if((f1 - 0.01) >= 0.0)" and f1 is 0.01 then also flow doesn't enter this condition.
            f1 = f1 - 0.01;
            count++;
        }
        performMath(f1);
    }   
}
#包括
#包括
无效性能(浮动);
整数计数=0;
内部主(空){
printf(“输入美元”);
float userInput=FloatInput();//FloatInput()只是一个获取用户输入的方法。
浮动*ptr=malloc(sizeof(浮动));
浮动美分=modff(用户输入,ptr);
性能(美分);
}
无效性能规格(浮动f1){
printf(“性能规格:%f\n”,f1);
如果(f1=0.0){
f1=f1-0.25;
计数++;
}如果((f1-0.10)>=0.0),则为else{
f1=f1-0.10;
计数++;
}如果((f1-0.05)>=0.0),则为else{
f1=f1-0.05;
计数++;
}else{//即使我使用“else if((f1-0.01)>=0.0)”并且f1是0.01,那么流也不会进入这个条件。
f1=f1-0.01;
计数++;
}
性能(f1);
}   
}

当你数硬币时,你不能递增
计数

例如:

    } else {
        f1 = f1 - 0.01;
        count++;   // count pennies
    }

你凭什么认为这个问题与负零有关?@JohnBollinger我打印了数值,如果是
0.15
,我看到
0.0000
,首先如果没有执行,而当我输入
0.41
时,我看到
-0.000
,首先如果执行了。请发布完整的代码。没有
FloatInput()
@WeatherVane:FloatInput()只是获取用户输入的方法。我对问题进行了编辑以澄清问题。既然您提出了一个问题,您如何知道错误在哪里?请张贴这将不会有帮助,因为问题不是关于计数,而是关于不满足的条件。。