什么是'-1。#IND'?

时间:2013-03-28 02:47:09

标签: c++ floating-point

我有一些代码可以让我绘制一个新月形状,并提取值以excel绘制。但是,取代某些数字,-1.#IND就位。首先,如果有人能解释这意味着什么,谷歌回来时有0个链接。其次,无论如何都要阻止它发生。

我的代码有一个简短的类比。除此之外我还有更多的代码,但这只是计算角度。

for(int j=0; j<=n; j++)//calculation for angles and output displayed to user
{
    Xnew2 = -j*(Y+R1)/n; //calculate x coordinate
    Ynew2 = Y*(pow(1-(pow((Xnew2/X),2)),0.5));
    if(abs(Ynew2) <= R1)
        cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl;
}

更多信息

我现在遇到了这段代码的问题。

for(int i=0; i<=n; i++) //calculation for angles and output displayed to user
{                                          
    Xnew = -i*(Y+R1)/n; //calculate x coordinate
    Ynew = pow((((Y+R1)*(Y+R1)) - (Xnew*Xnew)), 0.5); //calculate y coordinate

AND

for(int j=0; j<=n; j++)//calculation for angles and output displayed to user
{
    Xnew2 = -j*(Y+R1)/((n)+((0.00001)*(n==0))); //calculate x coordinate
    Ynew2 = Y*(pow(abs(1-(pow((Xnew2/X),2))),0.5));
    if(abs(Ynew2) <= R1)
        cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl;

我遇到了绘制新月的问题,我无法让两个圆圈具有相同的起点?如果这是有道理的,我试图得到两个圆圈来绘制一个新月,因为它们具有相同的起点和终点。我必须使用的唯一用户输入是半径和选择的中心点。

如果有人对如何做到这一点有任何建议,那就太棒了,目前所有我都得到更多的“半甜甜圈”形状,因为圈子没有连接。

4 个答案:

答案 0 :(得分:4)

#IND表示不确定的形式。

您所拥有的内容简称为'Not a number'NaN

从维基百科引用,生成是通过以下方式完成的:

  
      
  • 使用NaN作为至少一个操作数的操作。
  •   
  • 分区0/0和±∞/±∞
  •   
  • 乘法0×±∞和±∞×0
  •   
  • 加法∞+( - ∞),( - ∞)+∞和等效减法
  •   
  • 负数的平方根。
  •   
  • 负数的对数
  •   
  • 小于-1或大于+1的数字的反正弦或余弦。
  •   

你至少要做其中一件事。

修改

在分析您的代码后,这有两种可能性:

  • n == 0在第一次迭代j == 0时,Xnew2-1.#IND
  • Xnew2大于X时,Ynew2将会很复杂 - &gt; NaN

答案 1 :(得分:2)

您正在对浮点数执行非法操作,例如取负数的平方根。这可能是在Windows上。在Linux上,你会得到NaN(不是数字)或inf。有关详细信息,请参阅-1 #IND Question;第二个答案中提供的链接很有帮助。

答案 2 :(得分:2)

这来自维基百科的IEEE 754 Nan条目:

  

有三种操作可以返回NaN:

Operations with a NaN as at least one operand.
Indeterminate forms
    The divisions 0/0 and ±∞/±∞
    The multiplications 0×±∞ and ±∞×0
    The additions ∞ + (−∞), (−∞) + ∞ and equivalent subtractions
    The standard has alternative functions for powers:
        The standard pow function and the integer exponent pown function define 00, 1∞, and ∞0 as 1.
        The powr function defines all three indeterminate forms as invalid operations and so returns NaN.

Real operations with complex results, for example:
    The square root of a negative number.
    The logarithm of a negative number
    The inverse sine or cosine of a number that is less than −1 or greater than +1.

答案 3 :(得分:1)

您正在将负数提高到非逆数(即1 / 2,5,0.25,0.333333等)的幂,这导致复数。像sqrt(-1)aka(-1)^(0.5)

此外,您还可以将两行代码中的0/0等同起来。

使用此代码:(它取你的权力基数的绝对值(防止负值,从而防止想象的答案(复数= NaN = -1。#IND))如果n,它也会阻止你除以0 == 0 ...在这种情况下,它将0.00001添加到分母

for(int j=0; j<=n; j++)//calculation for angles and output displayed to user
{
Xnew2 = -j*(Y+R1)/((n)+((0.00001)*(n==0)); //calculate x coordinate
Ynew2 = Y*(pow(abs(1-(pow((Xnew2/X),2))),0.5));
if(abs(Ynew2) <= R1)
cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl;
}
{
Xnew3 = -j*(Y+R1)/((n)+((0.00001)*(n==0));  //calculate x coordinate
Ynew3 = Y*(pow(abs(1-(pow((Xnew3/X),2))),0.5)); //calculate y coordinate
if(abs(Ynew3) <= R1)
cout<<"\n("<<Xnew3<<", "<<Ynew3<<")"<<endl; //show x,y coordinates
}

*将来避免使用负数的根(这与将负数提升为非反分数幂相同),避免取负数的对数,并避免除以0这些都产生NaN(-1。#IND)



这段代码可能更好(它使用条件值使你的幂基数为零,如果它小于零以防止想象的答案):

for(int j=0; j<=n; j++)//calculation for angles and output displayed to user
{
Xnew2 = -j*(Y+R1)/((n)+((0.00001)*(n==0)); //calculate x coordinate
Ynew2 = Y*(pow(((1-(pow((Xnew2/X),2)))*((1-(pow((Xnew2/X),2)))>(0))),0.5));
if(abs(Ynew2) <= R1)
cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl;
}
{
Xnew3 = -j*(Y+R1)/((n)+((0.00001)*(n==0));  //calculate x coordinate
Ynew3 = Y*(pow(((1-(pow((Xnew3/X),2))))*((1-(pow((Xnew3/X),2))))>(0))),0.5)); //calculate y coordinate
if(abs(Ynew3) <= R1)
cout<<"\n("<<Xnew3<<", "<<Ynew3<<")"<<endl; //show x,y coordinates
}



* 我还想指出他的回答中提到的“Magtheridon96”。代码现在确保n不等于零,否则你可以除以零,虽然我认为这会产生#INF而不是#IND ......除非“-j (Y + R1)”也为零,那么它将是0/0,它将是#IND