From 148fea55749cb5054842993bf7c1288c98d8e405 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 10 Dec 2017 10:19:05 -0500 Subject: [PATCH] better efiRound implementation --- firmware/util/efilib.cpp | 9 ++++++++- firmware/util/efilib.h | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/firmware/util/efilib.cpp b/firmware/util/efilib.cpp index 82ff775bc9..8145a94b0e 100644 --- a/firmware/util/efilib.cpp +++ b/firmware/util/efilib.cpp @@ -21,10 +21,17 @@ int minI(int i1, int i2) { return i1 < i2 ? i1 : i2; } -float efiRound(float value, float precision) { +/* +float efiFloat(float value, float precision) { int a = (int) (value / precision); return a * precision; } +*/ + +float efiRound(float value, float precision) { + float a = rintf (value / precision); + return a * precision; +} float absF(float value) { return value > 0 ? value : -value; diff --git a/firmware/util/efilib.h b/firmware/util/efilib.h index 38951a63f7..de8223f4ac 100644 --- a/firmware/util/efilib.h +++ b/firmware/util/efilib.h @@ -51,6 +51,10 @@ int atoi(const char *string); int absI(int32_t value); float absF(float value); +/** + * Rounds value to specified precision. + * @param precision some pow of 10 value - for example, 100 for two digit precision + */ float efiRound(float value, float precision); int maxI(int i1, int i2); int minI(int i1, int i2);