aboutsummaryrefslogtreecommitdiff
path: root/src/core/Utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/Utils.cpp')
-rw-r--r--src/core/Utils.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/core/Utils.cpp b/src/core/Utils.cpp
index af864f57f7..af50bbbaf7 100644
--- a/src/core/Utils.cpp
+++ b/src/core/Utils.cpp
@@ -21,10 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
+
#include "arm_compute/core/Utils.h"
#include "arm_compute/core/FixedPoint.h"
+#include "support/ToolchainSupport.h"
+
#include <algorithm>
#include <cmath>
#include <cstdint>
@@ -387,3 +390,34 @@ int arm_compute::max_consecutive_elements_display_width(std::ostream &s, DataTyp
}
return 0;
}
+
+int arm_compute::round(float x, RoundingPolicy rounding_policy)
+{
+ using namespace std;
+ int rounded = 0;
+ switch(rounding_policy)
+ {
+ case RoundingPolicy::TO_ZERO:
+ {
+ rounded = static_cast<int>(x);
+ break;
+ }
+ case RoundingPolicy::TO_NEAREST_UP:
+ {
+ rounded = static_cast<int>(support::cpp11::round(x));
+ break;
+ }
+ case RoundingPolicy::TO_NEAREST_EVEN:
+ {
+ ARM_COMPUTE_ERROR("TO_NEAREST_EVEN rounding policy is not supported.");
+ break;
+ }
+ default:
+ {
+ ARM_COMPUTE_ERROR("Unsupported rounding policy.");
+ break;
+ }
+ }
+
+ return rounded;
+}