summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQin Fandong <shell_way@foxmail.com>2023-01-18 17:02:53 +1100
committerCraig Small <csmall@dropbear.xyz>2023-01-18 17:02:53 +1100
commit0a5ccbdd4273f063344b70be15fb22f3e7c250a6 (patch)
tree853185ed77adac664c6dc4bff8c3151ea3f09b16
parent68e2c0fc53c78217d5fb3bfbb6f73a6e5d0e39bd (diff)
downloadprocps-ng-0a5ccbdd4273f063344b70be15fb22f3e7c250a6.tar.gz
vmstat: precision issues in unitConvert()
Fix conversion errors due to precision issues in function unitConvert For example: unitConvert(98720620) will return 98720624, not 98720620. Because we do (unsigned long)(float)98720620 in function unitConvert and this is wrong! We should do (unsigned long)(double)98720620 here. Signed-off-by: Craig Small <csmall@dropbear.xyz> References: procps-ng/procps!75
-rw-r--r--NEWS1
-rw-r--r--src/vmstat.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index cec971e..40a39e9 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ procps-ng-NEXT
* vmstat: Referesh memory statistics Debian #1027963
* vmstat: Fix initial si,so,bi,bo,in & cs values issue #15
Debian #668580
+ * vmstat: Fix conversion errors due to precision merge #75
* w: Add --pids option merge #159
* watch: Pass through beep issue #104
* watch: -r option to not re-exec on SIGWINCH merge #125
diff --git a/src/vmstat.c b/src/vmstat.c
index b4bcb8f..eed130c 100644
--- a/src/vmstat.c
+++ b/src/vmstat.c
@@ -336,8 +336,8 @@ static void new_header(void)
static unsigned long unitConvert(unsigned long size)
{
- float cvSize;
- cvSize = (float)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
+ double cvSize;
+ cvSize = (double)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
return ((unsigned long)cvSize);
}