Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
C++ 为什么可以';我不能在if循环中使用动态变量吗?_C++_Arduino - Fatal编程技术网

C++ 为什么可以';我不能在if循环中使用动态变量吗?

C++ 为什么可以';我不能在if循环中使用动态变量吗?,c++,arduino,C++,Arduino,我试图使用(I),正弦值的总和,作为if循环的基础。if循环需要将sin(d*pi/180)+1等于(i)分数或倍数的(d)值存储到数组arr中。当我尝试在if语句的右侧使用i时,代码无法正常工作,但如果我尝试使用常量,则代码可以工作。我需要一种使用变量的方法,因为我不会提前知道我将成为什么样的人 int arr[10]; //signed int d; float i = 0; int p; float d; float e; //float s = sin(d*(PI/180))+1;//f

我试图使用(I),正弦值的总和,作为if循环的基础。if循环需要将sin(d*pi/180)+1等于(i)分数或倍数的(d)值存储到数组arr中。当我尝试在if语句的右侧使用i时,代码无法正常工作,但如果我尝试使用常量,则代码可以工作。我需要一种使用变量的方法,因为我不会提前知道我将成为什么样的人

int arr[10];
//signed int d;
float i = 0;
int p;
float d;
float e;
//float s = sin(d*(PI/180))+1;//float produces decimals
void setup(){
  Serial.begin(9600);
}
void loop(){
  for(d = 0; d < 360; d++){
    i = i + sin(d*(PI/180))+1;//add each value to the previous one
  }
  Serial.println(i/360);//print the average of the values
    delay(500);  

  for(d = 0; d < 360; d++){
    if (sin(d*(PI/180))+1 == 1.5*i/360){
        arr[p++] = d;
      }
  }
  for(p = 0; p < 10; p++){
    Serial.println(arr[p]);
    delay(500);
  }
int-arr[10];
//签名int d;
浮点数i=0;
INTP;
浮动d;
浮子e;
//浮点数s=sin(d*(PI/180))+1//浮点产生小数
无效设置(){
Serial.begin(9600);
}
void循环(){
对于(d=0;d<360;d++){
i=i+sin(d*(PI/180))+1;//将每个值与前一个值相加
}
Serial.println(i/360);//打印值的平均值
延迟(500);
对于(d=0;d<360;d++){
如果(sin(d*(PI/180))+1==1.5*i/360){
arr[p++]=d;
}
}
对于(p=0;p<10;p++){
Serial.println(arr[p]);
延迟(500);
}

}

浮点值存储在内存中,不像我们在纸上那样。浮点数存储为2的幂。因此,可以精确存储0.5或0.25,而0.2或0.3-则不能

您正在尝试比较两个浮点值
(sin(d*(PI/180))+1
1.5*i/360
d
在您的情况下(虽然是浮点值),它实际上表示为整数,并且被精确存储,
i
是一个浮点值。因此,左侧和右侧可以大致相等,但实际上相等(非常)很少。您可以使用如下构造:

计数晶圆厂(arg1-arg2)
并将此结果与所需的epsylon(一些表示参数之间无差异的较小值)进行比较。

浮点值存储在内存中,这与我们在纸上所做的不同。浮点值存储为2的幂。因此,可以精确存储0.5或0.25,而0.2或0.3-无法

您正在尝试比较两个浮点值
(sin(d*(PI/180))+1
1.5*i/360
d
在您的情况下(虽然是浮点值),它实际上表示为整数,并且被精确存储,
i
是一个浮点值。因此,左侧和右侧可以大致相等,但实际上相等(非常)很少。您可以使用如下构造:

计数晶圆厂(arg1-arg2)
并将此结果与所需的
epsylon
(表示参数之间无差异的较小值)进行比较。

无法发现您的问题。什么对常量有效,什么对常量无效。“它不起作用”不足以帮助;)如果我用1.5而不是1.5*I/360,在If语句中,结果是1.00,30,150,0,0,0,0,0,0(这是正确的)。但是如果我用1.5*I/360,结果是1.00,0,0,0,0,0,0,0。无法捕捉到你的问题。什么在常量中起作用,什么不起作用。“它不起作用”是不够的;)如果我用1.5而不是1.5*I/360,在if语句中,结果是1.00,30,150,0,0,0,0,0,0,0(这是正确的)。但是如果我使用1.5*I/360,结果是1.00,0,0,0,0,0,0,0,0,0,0,0。