[PATCH] Explicitly convert type to double to avoid losing precision

Division between integers will also be integer. Thus, to preserve fractional part explicitly convert first operand to double. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 28d54aab05 ("examples: Introduce domtop") Signed-off-by: Egor Makrushin <emakrushin@astralinux.ru> --- examples/c/domain/domtop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/c/domain/domtop.c b/examples/c/domain/domtop.c index dd35ec8661..65663a1c39 100644 --- a/examples/c/domain/domtop.c +++ b/examples/c/domain/domtop.c @@ -224,7 +224,7 @@ print_cpu_usage(size_t cpu, * performed has a bad effect on the precision, so instead of dividing * @now_params and @then_params by 1000 and then multiplying again by * 100, we divide only once by 10 and get the same result. */ - usage = (now_params[pos].value.ul - then_params[pos].value.ul) / + usage = (double)(now_params[pos].value.ul - then_params[pos].value.ul) / (now - then) / 10; if (delim) -- 2.30.2

On Tue, Jan 23, 2024 at 12:28:34PM +0300, Egor Makrushin wrote:
Division between integers will also be integer. Thus, to preserve fractional part explicitly convert first operand to double.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 28d54aab05 ("examples: Introduce domtop") Signed-off-by: Egor Makrushin <emakrushin@astralinux.ru>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com> Thanks for the patch.
--- examples/c/domain/domtop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/c/domain/domtop.c b/examples/c/domain/domtop.c index dd35ec8661..65663a1c39 100644 --- a/examples/c/domain/domtop.c +++ b/examples/c/domain/domtop.c @@ -224,7 +224,7 @@ print_cpu_usage(size_t cpu, * performed has a bad effect on the precision, so instead of dividing * @now_params and @then_params by 1000 and then multiplying again by * 100, we divide only once by 10 and get the same result. */ - usage = (now_params[pos].value.ul - then_params[pos].value.ul) / + usage = (double)(now_params[pos].value.ul - then_params[pos].value.ul) / (now - then) / 10;
if (delim) -- 2.30.2 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org
participants (2)
-
Egor Makrushin
-
Martin Kletzander