Nehmen wir an, ich habe eine Liste von Werten, die mit 91,875 multipliziert und gerundet sind mit Round to even (alias Banker's Rounding) -Methode. Hier sind die ersten 20 Vielfachen:Wie kann ich das richtige Vielfache auswählen?
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
Angenommen, dass zwischen diesen Werten mein System andere Werte erhält. Ich muss überprüfen, welche von ihnen sind mehrere meiner ursprünglichen 91,875
Schritt und welche nicht.
Beispiel. I aus der Liste stand:
3583 (before rounding it was 91,875 * 39 = 3583,125)
3584
in diesem Fall weiß ich, dass der Wert zu wählen, ist nur 3583 seit:
lrint(91,875 * 39) = 3583
und verwerfen 3584, die zwischen 3583 nur ein Wert ist und die Nächster Schritt:
lrint(91,875 * 39) = 3583
lrint(91,875 * 40) = 3675
Wie kann ich es auswählen? Ich habe nicht 39
und 40
, wenn ich die Werte bekam. Ich habe versucht, mit:
int times = round(currentSample/samplesPerPulse);
double diff = abs(samplesPerPulse * times - currentSample);
if (diff < 1) {
... do somethings
}
wo currentSample
sind 3583 und 3584 und samplesPerPulse
91.875, aber auch mit 3584 diff
niedriger als 1.
Warum tun teilen Sie nicht Ihren vermuteten Wert mit 91.875, multiplizieren Sie zurück, runden Sie ab, und vergleichen Sie das Ergebnis mit der Eingabe? – GMichael
@Michael: Ich habe nicht die "39" und "40" wenn ich meine Werte habe, also weiß ich nicht wie "wie viel" ich wieder multiplizieren soll! – markzzz
lrint (floor (Eingabe/91875) * 91875) == Eingabe? lrint (ceil (Eingabe/91875) * 91875) == Eingabe? – GMichael