From 281556e93d6d259db768a3c6fdefd48a9deeb347 Mon Sep 17 00:00:00 2001 From: Cary R Date: Fri, 11 Oct 2013 11:24:39 -0700 Subject: [PATCH] Fix another real to vpiIntVal conversion in the run time --- vvp/vpi_vthr_vector.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/vvp/vpi_vthr_vector.cc b/vvp/vpi_vthr_vector.cc index f44a4dbc4..5899b3201 100644 --- a/vvp/vpi_vthr_vector.cc +++ b/vvp/vpi_vthr_vector.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001-2012 Stephen Williams (steve@icarus.com) + * Copyright (c) 2001-2013 Stephen Williams (steve@icarus.com) * Copyright (c) 2001 Stephan Boettcher * * This source code is free software; you can redistribute it @@ -542,8 +542,15 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp) break; case vpiIntVal: - vp->value.integer = (int)(val + 0.5); - break; + /* NaN or +/- infinity are translated as 0. */ + if (val != val || (val && (val == 0.5*val))) { + val = 0.0; + } else { + if (val >= 0.0) val = floor(val + 0.5); + else val = ceil(val - 0.5); + } + vp->value.integer = val; + break; case vpiDecStrVal: sprintf(rbuf, "%0.0f", val);