2012-10-14 84 views
2

其中f的值,输出将是“世界”?浮点运算,C输出

#include<stdio.h> 
int main(){ 
    float f= ... ; 
    if(f==f) 
    printf("hello\n"); 
    else 
    printf("world\n"); 
return 0; 
} 

什么都会有三个点(...)

+0

f = 1.0f/0.0f;例如 – Listing

+1

不使用任何函数或任何技巧...请建议我一些算术值,这是浮动。 –

+0

@Rahul:你已经有了下面的5个。 :) – cHao

回答

2

易于更换。

float f = (puts("world"), exit(0), 0.0f); 

编辑:是的,我知道你正在寻找一个不同的答案。但我会变得可爱,因为这看起来像一个家庭作业或家庭测验的问题,甚至没有被分解成它的部分。

+1

只有一些算术价值...你可以建议一个? –

+0

啊! @Dietrich Epp。你揍我2秒! :-) – TheCodeArtist

4

尝试这种情况:

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

int main(){ 
    float f = nanf("0.0"); 
    printf("%f\n", f); 

    if(f==f) 
    printf("hello\n"); 
    else 
    printf("world\n"); 
return 0; 
} 
+0

这可能是OP正在寻找的东西。 – Kirby

+0

+1:来自/审查提供此答案。 –

2

IEEE 754浮点数可以表示正或负infinityNaN(非数字)。这3个值来自计算结果未定义或无法准确表示的结果。 NaN总是通过表达式传播。即任何含有NaN的表达将评估NaN

您还可以故意将浮点变量设置为NaN。例如,下面的完全有效的浮点表达式会做的伎俩:在infinity and NaN in floating point numbers

sqrtf(-1.0f) // NaN 

更多信息。


PS:我很想忽略这个,因为它看起来像一个简单的功课问:但是,随着功课的标签已被弃用,所有...

+0

公平地说,它也可能是一个面试问题。 :) – cHao

+0

:) :) @cHao我希望他能得到这份工作;-) ;-) – TheCodeArtist

+1

无限相比,本身就会产生真实,就像任何普通数字一样。唯一没有做到这一点的是NaN。另外,你关于无限的陈述并不是真的,因为有些情况下无限输入会产生NaN。 – Lindydancer

0

可以使用NAN宏从math.h

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

int main(void) 
{ 
    float f = NAN; 
    if (f == f) 
    printf("hello\n"); 
    else 
    printf("world\n"); 
} 

注意,这个宏已被C99引入不存在,如果实现不支持无提示NaN为float类型。