2017-02-21 21 views
-3

我有一個問題在我的RobotC代碼中當float達到無窮大,返回-1.#IO如何捕捉時,浮= -1。#IO

這是如果float達到-Infinity時返回的值。

所以問題是float只能使用數值。我無法捕捉到這個價值。

如果我把

if (value == -1.#IO) { ... } 

編譯器說:unexpected #

如果我把

if (value == "-1.#IO") { ... } 

編譯器說:char string constant '"-1.#IO"' cannot be compared with value。這是顯而易見的,因爲它試圖比較一個字符串與float

現在我的公式計算一個值的範圍,其中正負無窮有時可以存在。

所以我需要找到一個方法來捕獲這個值,當它彈出,所以我可以用數值float值(在這種情況下將爲0)來代替它。

float my_Trig_LawOfSin_2Sides1Angle(float angleA, float sideA, float sideB) //SideA must be opposite AngleA 
{ 
    //Catch the divide by 0 on this first line and then return sideA+sideB; 
    if (angleA == 0) { 
     return sideA + sideB; //this is to avoid the divide by 0 error 
           //when the bot is looking straight. 
           //It will return the distance of the 
    } 
    float angleB = (asin(sideB * sin(angleA * (pi/180))/sideA)) * (180/pi); 
    if (angleB == "-1.#IO") { return 0; } 

    float angleC = 180 - (angleA + angleB); 
    float sideC = sideA * sin(angleC * (pi/180))/sin(AngleA * (pi/180)); 
    return sideC; 
} 

task main() 
{ 
    result = my_Trig_LawOfSin_2Sides1Angle(50, 200, 300); 
} 
+0

閱讀[問]並提供[mcve]。這是絕對不清楚你問什麼或你的問題是什麼 - 除非它是C語言。對於後者,有很好的書籍教授這門語言。 – Olaf

+0

我認爲這很清楚,我試圖使用盡可能少的代碼作爲possable。因此,爲什麼我說如果你想我的製造商,我可以添加它。在我以前的文章中,人們告訴我不要發佈代碼,並且發佈什麼是nessacery,這就是我所做的 – skyline

+0

有非常明確的網站規則。閱讀鏈接。 – Olaf

回答

3

如果你在C語言進行編程,你可以用<math.h>定義的宏來測試無限或NaN值:

  • int isinf(f)返回非零如果f是無限大的,積極的負。
  • int isnan(f)如果f是NaN值,則返回非零值。當表達式沒有定義值時,會產生NaN值(非數字):pow(0.0, 0.0),0.0/0.0 ...
  • isfinite(f)返回非零值是f既不是無限也不是南值。

您的環境使用類似C的話,可能會或可能不支持這些宏,如果沒有,你可以測試無窮這個簡單的解決方法:

if (1.0/value == 0) { 
    /* value is an infinity */ 
} 
-4

我發現如果我將浮點數轉換爲一個字符串,它將-1#IO轉換爲-1。#IND00

因此,我決定抓住那個insted並且工作。

... 
    float angleB = (asin(sideB*sin(angleA*(pi/180))/sideA))*(180/pi); 

    string infinityCatch = angleB; 
    if (infinityCatch == "-1.#IND00"){return 0;} 
... 
+2

你使用什麼編程語言? – chqrlie

+0

我在RobotC裏面使用了C for vex IDE。 – skyline

+0

'string'不是C標準類型。請閱讀[問],你沒有提供你問題中的所有必要信息,但假設這是普遍的事實。考慮'string'是一些字符串類型,這是**不是**有效的C! – Olaf