From 8c096b16a1ab942413020c91138398d8a23bd64e Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 12 May 2010 15:07:39 +0200 Subject: [PATCH] If a float can be casted to a long long without rounding loss, we can use the integer conversion function to write the score on disk. This is a seriuous speedup --- redis.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/redis.c b/redis.c index 90fe6f95..28f7a8b6 100644 --- a/redis.c +++ b/redis.c @@ -3513,7 +3513,10 @@ static int rdbSaveDoubleValue(FILE *fp, double val) { len = 1; buf[0] = (val < 0) ? 255 : 254; } else { - snprintf((char*)buf+1,sizeof(buf)-1,"%.17g",val); + if (val == ((long long)val)) + ll2string((char*)buf+1,sizeof(buf),(long long)val); + else + snprintf((char*)buf+1,sizeof(buf)-1,"%.17g",val); buf[0] = strlen((char*)buf+1); len = buf[0]+1; }