【问题标题】:Float with condition shows improper value Turbo C带有条件的浮点数显示不正确的值 Turbo C
【发布时间】:2013-10-23 09:13:29
【问题描述】:

执行此步骤时,我从If 获取值实际上应该来自else

#include<stdio.h>
void main()
{
 float a=0.9;
 clrscr();
 if(a<0.9)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
getch();

}

上述代码的输出来自 If。

只需检查下面的代码,这将正确输出到其他部分

#include<stdio.h>
void main()
{
 float a=0.8;
 clrscr();
 if(a<0.8)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
 getch();
}

上述代码的输出来自else

我试过 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9

0.7,0.9 只发给if 其他人发给else

请解释一下这个变化。

【问题讨论】:

标签: turbo-c


【解决方案1】:

浮点数按照 IEEE 格式存储为 2 的幂。这是浮点数比较的常见问题。

尝试通过添加 .f 来更改您的代码

#include<stdio.h>
void main()
{
 float a=0.9f;
 clrscr();
 if(a<0.9f)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
getch();

}

否则,您需要有多少精确度才能进行比较。您可以使用 delta (const float delta = 0.000001;) 并通过比较添加/减去该值。就像页面上给出的一样:

http://www.softwareandfinance.com/CPP/FAQ_Floating_Point.html

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多