我怎样才能选择正确的倍数?

时间:2016-05-13 09:33:06

标签: c++ algorithm rounding

假设我列出了一个乘以91,875的值列表,并使用Round to even(又名Banker'舍入)方法进行舍入。这是前20个倍数:

0           0
91,875      92
183,75      184
275,625     276
367,5       368
459,375     459
551,25      551
643,125     643
735         735
826,875     827
918,75      919
1010,625    1011
1102,5      1102
1194,375    1194
1286,25     1286
1378,125    1378
1470        1470
1561,875    1562
1653,75     1654
1745,625    1746

假设在这些值之间,我的系统接收其他值。我需要检查哪一个是原始91,875步骤的多个,哪些不是。

实施例。从我得到的清单:

3583 (before rounding it was 91,875 * 39 = 3583,125)
3584

在这种情况下,我知道选择的值仅为3583,因为:

lrint(91,875 * 39) = 3583

并丢弃3584,这只是介于3583和下一步之间的值:

lrint(91,875 * 39) = 3583
lrint(91,875 * 40) = 3675

我该如何选择它?获得值后,我没有3940。我试过了:

int times = round(currentSample / samplesPerPulse);
double diff = abs(samplesPerPulse * times - currentSample);

if (diff < 1) {
    ... do somethings
}

currentSample分别为3583和3584以及samplesPerPulse 91,875,但即使3584 diff低于1。

1 个答案:

答案 0 :(得分:1)

请尝试以下方法:

if((lrint(floor(currentSample / samplesPerPulse) * samplesPerPulse) == currentSample) or
   (lrint(ceil(currentSample / samplesPerPulse) * samplesPerPulse) == currentSample)
  )
{
   .... do something
}