mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
For safety, make optimized round method consistent with Math.round for negative input too
This commit is contained in:
parent
27b5ce245d
commit
3b8b44856d
|
@ -23,13 +23,15 @@ public final class MathUtils {
|
|||
|
||||
/**
|
||||
* Ends up being a bit faster than {@link Math#round(float)}. This merely rounds its
|
||||
* argument to the nearest int, where x.5 rounds up to x+1.
|
||||
* argument to the nearest int, where x.5 rounds up to x+1. Semantics of this shortcut
|
||||
* differ slightly from {@link Math#round(float)} in that half rounds down for negative
|
||||
* values. -2.5 rounds to -3, not -2. For purposes here it makes no difference.
|
||||
*
|
||||
* @param d real value to round
|
||||
* @return nearest {@code int}
|
||||
*/
|
||||
public static int round(float d) {
|
||||
return (int) (d + 0.5f);
|
||||
return (int) (d + (d < 0.0f ? -0.5f : 0.5f));
|
||||
}
|
||||
|
||||
public static float distance(float aX, float aY, float bX, float bY) {
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright 2014 ZXing authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.zxing.common.detector;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public final class MathUtilsTestCase extends Assert {
|
||||
|
||||
@Test
|
||||
public void testRound() {
|
||||
assertEquals(-1, MathUtils.round(-1.0f));
|
||||
assertEquals(0, MathUtils.round(0.0f));
|
||||
assertEquals(1, MathUtils.round(1.0f));
|
||||
|
||||
assertEquals(2, MathUtils.round(1.9f));
|
||||
assertEquals(2, MathUtils.round(2.1f));
|
||||
|
||||
assertEquals(3, MathUtils.round(2.5f));
|
||||
|
||||
assertEquals(-2, MathUtils.round(-1.9f));
|
||||
assertEquals(-2, MathUtils.round(-2.1f));
|
||||
|
||||
assertEquals(-3, MathUtils.round(-2.5f)); // This differs from Math.round()
|
||||
|
||||
assertEquals(Integer.MAX_VALUE, MathUtils.round(Integer.MAX_VALUE));
|
||||
assertEquals(Integer.MIN_VALUE, MathUtils.round(Integer.MIN_VALUE));
|
||||
|
||||
assertEquals(Integer.MAX_VALUE, MathUtils.round(Float.POSITIVE_INFINITY));
|
||||
assertEquals(Integer.MIN_VALUE, MathUtils.round(Float.NEGATIVE_INFINITY));
|
||||
|
||||
assertEquals(0, MathUtils.round(Float.NaN));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue