diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index a925b37b9f7c..39e10d86a2c7 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -64,13 +64,13 @@ uint32_t CameraSensorHelper::gainCode(double gain) const
 	case AnalogueGainLinear:
 		ASSERT(k.linear.m0 == 0 || k.linear.m1 == 0);
 
-		return (k.linear.c0 - k.linear.c1 * gain) /
-		       (k.linear.m1 * gain - k.linear.m0);
+		return std::round((k.linear.c0 - k.linear.c1 * gain) /
+				  (k.linear.m1 * gain - k.linear.m0));
 
 	case AnalogueGainExponential:
 		ASSERT(k.exp.a != 0 && k.exp.m != 0);
 
-		return std::log2(gain / k.exp.a) / k.exp.m;
+		return std::round(std::log2(gain / k.exp.a) / k.exp.m);
 
 	default:
 		ASSERT(false);
