From 095cedb3058bfcedfa891da523fd11be9fd9a44f Mon Sep 17 00:00:00 2001 From: Cary R Date: Fri, 11 Oct 2013 10:45:33 -0700 Subject: [PATCH] Fix real to vpiIntVal conversion in run time --- vvp/vpi_callback.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/vvp/vpi_callback.cc b/vvp/vpi_callback.cc index a847b5785..d3629df04 100644 --- a/vvp/vpi_callback.cc +++ b/vvp/vpi_callback.cc @@ -771,7 +771,14 @@ static void real_signal_value(struct t_vpi_value*vp, double rval) break; case vpiIntVal: - vp->value.integer = (int)(rval + 0.5); + /* NaN or +/- infinity are translated as 0. */ + if (rval != rval || (rval && (rval == 0.5*rval))) { + rval = 0.0; + } else { + if (rval >= 0.0) rval = floor(rval + 0.5); + else rval = ceil(rval - 0.5); + } + vp->value.integer = rval; break; case vpiDecStrVal: