0
假設我有一個值乘以91,875並使用Round to even(又名銀行家舍入)四捨五入的值的列表。以下是前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
我該如何選擇它?當我得到這些值時,我沒有39
和40
。我試着:
int times = round(currentSample/samplesPerPulse);
double diff = abs(samplesPerPulse * times - currentSample);
if (diff < 1) {
... do somethings
}
其中currentSample
是3583和3584和samplesPerPulse
91875,但即使3584 diff
低於1
爲什麼不是你把你懷疑的價值除以91,875,再乘以回合,並將結果與輸入進行比較? – GMichael
@邁克爾:當我得到我的價值觀時,我沒有「39」和「40」,所以我不知道「我應該增加多少」! – markzzz
lrint(floor(input/91875)* 91875)== input? (打印(輸入/ 91875)* 91875)==輸入? – GMichael