f のどの値に対して、出力は「世界」になりますか?
#include<stdio.h>
int main(){
float f= ... ;
if(f==f)
printf("hello\n");
else
printf("world\n");
return 0;
}
3つのドットに置き換えられるもの (...)
f のどの値に対して、出力は「世界」になりますか?
#include<stdio.h>
int main(){
float f= ... ;
if(f==f)
printf("hello\n");
else
printf("world\n");
return 0;
}
3つのドットに置き換えられるもの (...)
これを試して:
#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;
}
簡単。
float f = (puts("world"), exit(0), 0.0f);
編集:はい、私はあなたが別の答えを探していることを知っています。でも、宿題や持ち帰りクイズの問題のように見えて、部分的に分解されていないので、かわいくなります。
IEEE 754 浮動小数点数は、正または負infinity
のNaN
(数値ではない) を表すことができます。これら 3 つの値は、結果が定義されていないか、正確に表すことができない計算から生じます。常にNaN
式を介して伝播します。つまり、 を含む式はすべて評価されます。NaN
NaN
意図的に浮動小数点変数を に設定することもできますNaN
。たとえば、次の完全に有効な浮動小数点式はうまくいきます。
sqrtf(-1.0f) // NaN
PS: 単純な宿題 Q のように見えるので、これを無視したくなりました。しかし、宿題タグが非推奨になり、すべて...
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
型の quiet NaN をサポートしていない場合は存在しないことに注意してください。