@@ -87,15 +87,6 @@ static int vthr_word_get(int code, vpiHandle ref)
8787 }
8888}
8989
90- static double vlg_round (double rval)
91- {
92- if (rval >= 0.0 ) {
93- return floor (rval + 0.5 );
94- } else {
95- return ceil (rval - 0.5 );
96- }
97- }
98-
9990static void vthr_real_get_value (vpiHandle ref, s_vpi_value*vp)
10091{
10192 const __vpiVThrWord*obj = dynamic_cast <__vpiVThrWord*>(ref);
@@ -127,7 +118,7 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
127118 if (val != val || (val && (val == 0.5 *val))) {
128119 val = 0.0 ;
129120 } else {
130- val = vlg_round (val);
121+ val = std::round (val);
131122 }
132123 vp->value .integer = (PLI_INT32)val;
133124 break ;
@@ -136,30 +127,30 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
136127 if (std::isnan (val))
137128 snprintf (rbuf, RBUF_USE_SIZE, " %s" , " nan" );
138129 else
139- snprintf (rbuf, RBUF_USE_SIZE, " %0.0f" , vlg_round (val));
130+ snprintf (rbuf, RBUF_USE_SIZE, " %0.0f" , std::round (val));
140131 vp->value .str = rbuf;
141132 break ;
142133
143134 case vpiOctStrVal:
144- snprintf (rbuf, RBUF_USE_SIZE, " %" PRIo64, ( uint64_t ) vlg_round (val));
135+ snprintf (rbuf, RBUF_USE_SIZE, " %" PRIo64, vlg_round_to_u64 (val));
145136 vp->value .str = rbuf;
146137 break ;
147138
148139 case vpiHexStrVal:
149- snprintf (rbuf, RBUF_USE_SIZE, " %" PRIx64, ( uint64_t ) vlg_round (val));
140+ snprintf (rbuf, RBUF_USE_SIZE, " %" PRIx64, vlg_round_to_u64 (val));
150141 vp->value .str = rbuf;
151142 break ;
152143
153144 case vpiBinStrVal: {
154- uint64_t vali = ( uint64_t ) vlg_round (val);
145+ uint64_t vali = vlg_round_to_u64 (val);
155146 unsigned len = 0 ;
156147
157148 while (vali > 0 ) {
158149 len += 1 ;
159150 vali /= 2 ;
160151 }
161152
162- vali = ( uint64_t ) vlg_round (val);
153+ vali = vlg_round_to_u64 (val);
163154 for (unsigned idx = 0 ; idx < len ; idx += 1 ) {
164155 rbuf[len-idx-1 ] = (vali & 1 )? ' 1' : ' 0' ;
165156 vali /= 2 ;
0 commit comments