2016-05-13 11 views
0

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.

+0

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

+0

@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

+3

lrint (floor (Eingabe/91875) * 91875) == Eingabe? lrint (ceil (Eingabe/91875) * 91875) == Eingabe? – GMichael

Antwort

1

Bitte versuchen Sie folgendes:

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