Here’s my test:
#include
#include
float quantize(float value, float size) {
return std::round(value / size) * size;
}
int main() {
float values[] = {0.0f, 7.0f, 12.0f, 23.0f, 50.0f, 73.0f, 99.0f, 100.0f};
float size = 8.0f;
for (float value : values) {
float result = quantize(value, size);
std::cout << "Original value: " << value << ", Quantized value: " << result << std::endl;
}
return 0;
}
But it outputs:
Original value: 0, Quantized value: 0
Original value: 7, Quantized value: 8
Original value: 12, Quantized value: 16
Original value: 23, Quantized value: 24
Original value: 50, Quantized value: 48
Original value: 73, Quantized value: 72
Original value: 99, Quantized value: 96
Original value: 100, Quantized value: 104
Instead it should output:
Original value: 0, Quantized value: 0
Original value: 7, Quantized value: 12.5
Original value: 12, Quantized value: 12.5
Original value: 23, Quantized value: 25
Original value: 50, Quantized value: 50
Original value: 73, Quantized value: 75
Original value: 99, Quantized value: 100
Original value: 100, Quantized value: 100
Where am I wrong?
The code above:
divide, round, multiply.