【问题标题】:Floating Number in C [duplicate]C中的浮点数[重复]
【发布时间】:2015-02-17 10:19:48
【问题描述】:

今天我在玩 C 中的浮点数
代码喜欢:

float a = 0.0;
a += 0.8;
if(a == 0.800000)
   printf("correct");

if 语句没有被执行,为此我打印了 a 的值为 0.800000。

void main(){

    float a=0.0f;

    a=a+0.1f;


    if(a==0.1f) 
    printf( "1correct");

    a += 0.1f;

    if(a==0.2f) 
    printf( "2correct");

    a += 0.1f;

    if(a==0.3f) 
    printf( "3correct");

    a += 0.1f;

    if(a==0.4f) 
    printf( "4correct");

    if(a==0.5f) 
    printf( "5correct");

    a += 0.1f;

    if(a==0.6f) 
    printf( "6correct");


    a += 0.1f;

    if(a==0.7f) 
    printf( "7correct");


    a += 0.1f;


    if(a==0.8f) 
    printf( "8correct");

} 

以下程序将输出打印为:

1correct2correct3correct4correct5correct6correct

语句 7correct 和 8correct 没有被打印出来。

任何人都可以在这里解释一下Brief!!

【问题讨论】:

标签: c floating-accuracy floating-point-precision


【解决方案1】:

有许多十进制数不能用有限的二进制数字精确表示。

一般来说,测试浮点数或双精度数是否完全相等是个坏主意。如果您真的想测试它们,请检查它们是否适合小范围:

if ( a > 0.799999 && a < 0.800001 )
    printf( "correct" );

只要您可以使用整数而不是浮点数或双精度数,就这样做。例如,不要将浮点数用于循环计数器或数组索引。

浮点有很多很好的用途,比如建模物理现象,预测天气等等,但浮点有很多微妙之处。

【讨论】:

    【解决方案2】:

    因为浮点数可能会因为最大误差值而损失精度,所以您必须检查一个小范围而不是相等性。

    查看herehere 了解更多信息。

    【讨论】:

    • 我应该如何改进答案以免被否决?谢谢!
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多