Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 浮点数=-1时如何捕捉_Floating Point_Infinity_Robotc - Fatal编程技术网

Floating point 浮点数=-1时如何捕捉

Floating point 浮点数=-1时如何捕捉,floating-point,infinity,robotc,Floating Point,Infinity,Robotc,我的RobotC代码中有一个问题,当浮点值达到无穷大时,它返回-1.#IO 这是当浮点达到-无穷大时返回的值 所以问题是float只能使用数值。我不能理解这个值 如果我把 if (value == -1.#IO) { ... } if (value == "-1.#IO") { ... } 编译器说意外# 如果我把 if (value == -1.#IO) { ... } if (value == "-1.#IO") { ... } 编译器说,字符字符串常量'-1.#IO''不能与值进行

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

这是当
浮点
达到
-无穷大
时返回的值

所以问题是
float
只能使用数值。我不能理解这个值

如果我把

if (value == -1.#IO) { ... }
if (value == "-1.#IO") { ... }
编译器说
意外#

如果我把

if (value == -1.#IO) { ... }
if (value == "-1.#IO") { ... }
编译器说,
字符字符串常量'-1.#IO''不能与值
进行比较。这是显而易见的,因为它试图将字符串与
浮点值进行比较

现在,我的公式计算了一系列值,其中有时存在负无穷大和正无穷大

因此,我需要找到一种方法,在这个值弹出时捕获它,这样我就可以用一个数值
float
值来替换它(在这种情况下,它将是0)

float my\u Trig\u LawOfSin\u 2Sides1Angle(浮动角度A、浮动侧面A、浮动侧面B)//侧面A必须与角度A相反
{
//在第一行捕捉除以0的结果,然后返回sideA+sideB;
如果(角度A==0){
return sideA+sideB;//这是为了避免被0除的错误
//当机器人直视时。
//它将返回目标的距离
}
浮动角度b=(asin(sideB*sin(angleA*(pi/180))/sideA))*(180/pi);
如果(angleB==“-1.#IO”){返回0;}
浮动角度C=180-(角度A+B);
浮点数c=sideA*sin(angleC*(pi/180))/sin(AngleA*(pi/180));
返回sideC;
}
主要任务()
{
结果=my_Trig_LawOfSin_2sides1角(50、200、300);
}

如果使用C编程,可以使用
中定义的宏来测试无穷大或NaN值:

  • int-isinf(f)
    如果
    f
    是一个无穷大的值,是负数的正数,则返回非零
  • int-isnan(f)
    如果
    f
    是一个NaN值,则返回非零。当表达式没有定义值时,会生成NaN值(不是数字):
    pow(0.0,0.0)
    0.0/0.0
  • isfinite(f)
    返回非零is
    f
    既不是无限值也不是nan值
您的环境使用类似C的方言,可能支持也可能不支持这些宏,如果不支持,您可以通过以下简单的解决方法测试无穷大:

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

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

所以我决定抓住它,它成功了

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

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

阅读并提供一个简单的答案。除非是C语言,否则绝对不清楚你在问什么或者你的问题是什么。对于后者,有一些很好的书籍在教授这门语言。我认为这很清楚,并且我试图尽可能少地使用代码。因此,我说如果你想要我的配方,我可以添加它。在我过去的帖子中,人们告诉我不要发布代码,只发布Nessary a的内容,这就是我所做的1)我知道这不是一个常见的习语,我认为当我说上面的帖子不多时,这是显而易见的,这就是为什么我说它是什么。2) 我说的是-1.#IO是浮点达到无穷大时给出的值,这怎么不清楚?@Olaf首先我从未说过它是C语言的一部分。我只是说我用的是C代码。第二,它是一个浮点例外,正如IEEE浮点运算标准文档中所述,你可以在这篇文章中找到更多关于它的信息,正是这篇文章给了我信息,让我说它是在浮点达到无穷大时给出的。我只是想知道有没有办法抓住它。是的,有。我在下面发布了如何操作。OP没有使用C语言,他的问题对于RobotC来说是合法的,它似乎有无限的非标准字符串转换。您使用的是什么编程语言?我在RobotC中使用C用于vex IDE。
字符串
不是C标准类型。请阅读,你没有在你的问题中提供所有必要的信息,但假设这是普遍正确的。考虑到
string
是某种字符串类型,这不是有效的C@Olaf,仅供参考,RobotC是一种教育产品,最好用带有机器人API的C来描述。添加了一些简化:例如,
char*
被别名为
string
,添加了
bool
类型等。删除了一些标准C项-没有动态内存分配(不可能使用动态大小数组),没有结构返回函数,简化了枚举和结构声明,没有函数指针等(尽管大部分情况下都支持引用和指针)等。RobotC的大多数用户都是学生,根本不知道RobotC和C之间的区别。@CoolBots您注意到编辑添加RobotC标记和我的注释的时间戳了吗?这个问题被歪曲了。仅供参考:C有一个布尔类型!