以指数方式更新并打印数字

时间:2013-01-25 13:18:27

标签: c algorithm

我的问题是找到一种减少updateAccelerometer调用次数的方法。

int count = 0;
int accelerometer = updateAccelerometer();
while (accelerometer <= 500) {
  printf("Actual: %lf", accelerometer);
  accelerometer = updateAccelerometer();
  count++;
}

给出了:

Actual: 9
Actual: 28
Actual: 47
Actual: 65
Actual: 84
Actual: 103
Actual: 122
Actual: 141
Actual: 159
Actual: 178
Actual: 197
Actual: 216
Actual: 235
Actual: 253
Actual: 272
Actual: 291
Actual: 310
Actual: 329
Actual: 347
Actual: 366
Actual: 385
Actual: 404
Actual: 423
Actual: 442
Actual: 460
Actual: 479
Actual: 498

现在我的问题是我不想每次更新加速度计,而是以指数比例比例。如果我引入“线性比例”

我会这样做:

if (count % 2 = 0) accelerometer = updateAccelerometer();

这意味着,一个值将被读取,一个值将不会被等等,因为每次我调用updateAccelerometer它可能需要时间,我想在我远处时采用更少的值并且当我更有价值时近。

所以我的想法是有一个指数函数,只返回标有x的那个,不是因为我不打印其他的,而是因为我不更新加速度计

Actual: 9
Actual: 28
Actual: 47
Actual: 65
Actual: 84
Actual: 103x
Actual: 122
Actual: 141
Actual: 159
Actual: 178
Actual: 197
Actual: 216
Actual: 235x
Actual: 253
Actual: 272
Actual: 291
Actual: 310
Actual: 329x
Actual: 347
Actual: 366
Actual: 385
Actual: 404x
Actual: 423
Actual: 442
Actual: 460x
Actual: 479
Actual: 498x

这不是一个非常具体的问题,因为我有这个问题在许多其他情况下以指数方式跳过更新,任何勾号?

2 个答案:

答案 0 :(得分:3)

在您下次采样加速器之前看起来的计数数量应该是sqrt(fabs(500 - accelerometer)) / 3.25

答案 1 :(得分:0)

有很多方法可以做到!在应该打印数据时设置预定义的迭代索引,用某种数学函数来确定它。

然而,我会选择这样的东西:

int count = 0;
int timeToPrint = 5;
int timeSincePrinted = 0;
int minPrintSpan = 2;
int accelerometer = updateAccelerometer();
while (accelerometer <= 500) {
  timeSincePrinted++;
  if (timeToPrint == timeSincePrinted && timeSincePrinted >= minPrintSpan) {
    printf("Actual: %lf and %d", accelerometer, count);
    timeSincePrinted=0;
    timeToPrint--;
  }
  accelerometer = updateAccelerometer();
  count++;
}

那就是你有一个相当简单,低复杂性和易于调整的功能。希望这会有所帮助。