2014-02-21 62 views
-4

有源代碼。函數func的內容是未知的:需要編寫函數的內容

#include <stdio.h> 
#include <math.h> 
float func (void) 
{ 
    // Black box 
} 

int main (void) 
{ 
    float f1, f2; 
    int r1, r2; 

    f1 = 5.0f; 
    f2 = func(); 

    r1 = (f1 > f2); 
    r2 = (f1 <= f2); 

    printf ("r1=%d r2=%d\n", r1, r2); 
    return 0; 
} 

需要編寫函數func的內容,打印出信息:

r1=0 r2=0 

答案:

return pow(-5.0,0.5);

返回0.0/0.0;

不明白爲什麼?

+0

這是某種類型的腦筋急轉彎嗎? – ajay

+0

你知道C中的「0.0/0.0」是什麼意思嗎? – haccks

+0

@haccks不,它是什麼? – dima

回答

1

關於答案

return 0.0/0.0; 

它將返回NaN。現在在這種情況下,r1r2變成0

如果返回

return pow(-5.0, 0.5); 

負數的平方根是假想,因此不能表示爲真正的浮點數,因此由NaN的表示。在這種情況下,r1r2都是0
你的功能將類似於:

float func (void) 
{ 
    return 0.0/0.0 // return pow(-5.0, 0.5); 
} 

另一種選擇是,只返回NaN的。 (包括<math.h>)。

float func (void) 
{ 
    return NAN; 
} 
+1

'pow(-5.0, 0.5)'返回'NaN'。 'double pow(double,double)'不返回複數。 –

+0

@MartinR;我剛剛在wiki上閱讀:http://en.wikipedia.org/wiki/NaN :) – haccks

+2

從「man pow」:pow(x,y)返回一個NaN並引發「無效」浮點異常有限x <0和有限非整數y。 –

相關問題