如何解决此 int 溢出?
How do I resolve this int overflow?
int frequency(string note)
{
int i;
float f;
int n=0;
float octave= note[strlen(note)-1];
if(strlen(note)==3)
{
if(note[1]=='#')
{
n+=1;
}
else if(note[1]=='b')
{
n-=1;
}
}
if(note[0]=='B')
{
n+=2;
}
else if(note[0]=='C')
{
n-=9;
}
else if(note[0]=='D')
{
n-=7;
}
else if(note[0]=='E')
{
n-=5;
}
else if(note[0]=='F')
{
n-=4;
}
else if(note[0]=='G')
{
n-=2;
}
n+=(octave-4.0)*12.0;
float p= n/12.0;
f=(int)(round(pow(2.0,p)*440.0));
return f;
}
所以基本上每当我 运行 这段代码时,我都会收到一条错误消息 "runtime error: value 7.3641e+16 is outside the range of representable values of type 'int'"
那么返回的值就是-2147483648。我在网上查了一下,但没有找到对我的代码有帮助的答案。这也是在 cs50 IDE 中制作的,所以有一堆命令和导入的东西。我的程序编译正确并且可以 运行 那么我该如何解决这个问题?
半音音阶的音符频率首先不是整数。
如果传递给像 Cb 这样的两个字符的字符串,您会得到一个频率太高的愚蠢的巨大八度音阶。
int frequency(string note)
{
int i;
float f;
int n=0;
float octave= note[strlen(note)-1];
if(strlen(note)==3)
{
if(note[1]=='#')
{
n+=1;
}
else if(note[1]=='b')
{
n-=1;
}
}
if(note[0]=='B')
{
n+=2;
}
else if(note[0]=='C')
{
n-=9;
}
else if(note[0]=='D')
{
n-=7;
}
else if(note[0]=='E')
{
n-=5;
}
else if(note[0]=='F')
{
n-=4;
}
else if(note[0]=='G')
{
n-=2;
}
n+=(octave-4.0)*12.0;
float p= n/12.0;
f=(int)(round(pow(2.0,p)*440.0));
return f;
}
所以基本上每当我 运行 这段代码时,我都会收到一条错误消息 "runtime error: value 7.3641e+16 is outside the range of representable values of type 'int'"
那么返回的值就是-2147483648。我在网上查了一下,但没有找到对我的代码有帮助的答案。这也是在 cs50 IDE 中制作的,所以有一堆命令和导入的东西。我的程序编译正确并且可以 运行 那么我该如何解决这个问题?
半音音阶的音符频率首先不是整数。
如果传递给像 Cb 这样的两个字符的字符串,您会得到一个频率太高的愚蠢的巨大八度音阶。