From 3be3203377106f4fbb8cb36b81170669b6bc3dad Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Thu, 12 Jun 2008 22:44:16 +0000 Subject: [PATCH] Convert Inf and NaN values properly. --- src/libCom/misc/epicsConvert.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/libCom/misc/epicsConvert.c b/src/libCom/misc/epicsConvert.c index 34531c87c..e2a824b6c 100644 --- a/src/libCom/misc/epicsConvert.c +++ b/src/libCom/misc/epicsConvert.c @@ -1,15 +1,14 @@ /*************************************************************************\ -* Copyright (c) 2002 The University of Chicago, as Operator of Argonne +* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. -* EPICS BASE Versions 3.13.7 -* and higher are distributed subject to a Software License Agreement found +* EPICS BASE is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. \*************************************************************************/ /*epicsConvert.c*/ -#include +#include #include #include @@ -21,15 +20,23 @@ epicsShareFunc float epicsConvertDoubleToFloat(double value) { float rtnvalue; - if(value==0.0) { - return(0.0); + if (value == 0.0) { + rtnvalue = 0.0; + } else if (!finite(value)) { + rtnvalue = (float)value; } else { double abs = fabs(value); - if(abs>=FLT_MAX) { - if(value>0.0) rtnvalue = FLT_MAX; else rtnvalue = -FLT_MAX; - } else if(abs<=FLT_MIN) { - if(value>0.0) rtnvalue = FLT_MIN; else rtnvalue = -FLT_MIN; + if (abs >= FLT_MAX) { + if (value > 0.0) + rtnvalue = FLT_MAX; + else + rtnvalue = -FLT_MAX; + } else if(abs <= FLT_MIN) { + if (value > 0.0) + rtnvalue = FLT_MIN; + else + rtnvalue = -FLT_MIN; } else { rtnvalue = (float)value; }