浮点运算,C输出

时间:2012-10-14 15:59:19

标签: c++ c floating-point

对于f的值,输出将是“世界”?

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

什么将被三个点(...)替换

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

易。

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

修改:是的,我知道您正在寻找不同的答案。但是我会变得很可爱,因为这看起来像是家庭作业或带回家测验的问题,甚至还没有被分解成部分。

答案 2 :(得分:2)

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

您还可以故意将浮点变量设置为NaN。例如,以下完全有效的浮点表达式可以解决这个问题:

 sqrtf(-1.0f) // NaN

有关infinity and NaN in floating point numbers的更多信息。


PS:我很想忽略这一点,因为它看起来像是一个简单的作业Q.但是家庭作业标签被弃用了所有......

答案 3 :(得分: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中引入,如果实现不支持float类型的安静NaN,则该宏不存在。