如何在C中使用十进制值递增for循环

时间:2013-08-11 18:53:33

标签: c loops for-loop increment

我有这段代码

for (k=0; k<BUFFER_LEN; k++){                

           buffer[k] = sin(2*pi*f/fs*k);          //sine generation

我的循环每次递增1 - 所以k对于每次计算都是1,2,3,4,5 ......等等

我希望循环每次增加0.1,所以我的正弦计算更准确? 实现这一目标的最简单方法是什么?我尝试在for循环中递增0.1,但不要认为这是允许的,因为程序超时

编辑:这是一个解决方案

int i, k;
float z=0.1;

for(i = 0; i < BUFFER_LEN; i++){                         // fill the buffer
       buffer[k] = sin(2*pi*f/fs*z);                     // sine wave value generation
       z = z + 0.1;
       }

3 个答案:

答案 0 :(得分:5)

如果您想要做的只是递增.1,那么您的k值必须是浮点数。在那之后,它就像这样简单:

for(double k = 0; k < limit; k += 0.1)

但十进制值的过度使用可能会导致舍入错误,并且您的代码需要k为整数。这可能是一个更好的解决方案:

for(int k = 0; k < limit * 10; k++){
    //Now, in your equation, use k/10.0
    buffer[k] = sin(2 * pi * f / fs * (k / 10.0));
}

确保buffer的大小是其所需的十倍!

答案 1 :(得分:3)

简单解决方案:获得所需收益的倍数

double gain = 0.1;
for (k=0; k<BUFFER_LEN; k++) {                
  buffer[k] = sin(gain * 2*pi*(f/fs)*k);          //sine generation
}

需要更改你的k循环,BUFFER_LEN&amp;没有浮点问题。 1 /增益不需要是整数。


你原来的问题可能是由于:

int k;
for (k=0; k<BUFFER_LEN; k += 0.1) {                
  buffer[k] = sin(2*pi*f/fs*k);          //sine generation
}

在这种情况下,k += 0.1执行k = (int) (k + 0.1)会将总和截断回原始k。因此,你的循环将永远运行。

答案 2 :(得分:0)

一个天真的解决方案是:

for (double k=0; k<BUFFER_LEN/10; k+=0.1){                

           buffer[10*k] = sin(2*pi*f/fs*k);

但舍入错误可能会导致错误的结果。这就是为什么你应该在循环中使用整数运算并在循环中乘以0.1。

我会留下这个提醒不要做的事。