-3

我的 RobotC 代码中有一个问题,当 afloat达到无穷大时它会返回-1.#IO

这是 afloat到达时返回的值-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);
}
4

2 回答 2

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既不是无限也不是 nan 值。

您的环境使用类似 C 的方言,可能支持也可能不支持这些宏,如果不支持,您可以通过以下简单的工作来测试无穷大:

if (1.0 / value == 0) {
    /* value is an infinity */
}
于 2017-02-21T00:10:24.620 回答
-4

我发现如果我将浮点数转换为字符串,它会将 -1#IO 转换为 -1.#IND00

所以我决定抓住它,它起作用了。

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

    string infinityCatch = angleB;
    if (infinityCatch == "-1.#IND00"){return 0;}
...
于 2017-02-21T01:56:04.483 回答