@@ -274,11 +274,12 @@ class my_fix(type(a)):
274274 # improve precision
275275 my_fix .set_precision (a .k - 2 , a .k )
276276 n_shift = a .k - 2 - a .f
277+ res_k = 2 * a .k - n_shift
277278 x = my_fix ._new (frac .v << n_shift )
278279 # evaluates fractional part of a in p_1045
279280 e = p_eval (p_1045 , x )
280281 g = a ._new (whole_exp .TruncMul (e .v , 2 * a .k , n_shift ,
281- nearest = a .round_nearest ), a . k , a .f )
282+ nearest = a .round_nearest ), res_k , a .f )
282283 return g
283284 # how many bits to use from integer part
284285 n_int_bits = int (math .ceil (math .log (a .k - a .f , 2 )))
@@ -368,15 +369,15 @@ class my_fix(type(a)):
368369 pow2_bits = [sint .conv (x ) for x in higher_bits ]
369370 d = floatingpoint .Pow2_from_bits (pow2_bits )
370371 g = exp_from_parts (d , c )
371- small_result = a ._new (g .v .round (a .f + 2 ** n_int_bits ,
372+ small_result = a ._new (g .v .round (a .f + 2 ** n_int_bits + 1 ,
372373 2 ** n_int_bits , signed = False ,
373374 nearest = a .round_nearest ),
374375 k = a .k , f = a .f )
375376 if zero_output :
376377 t = sint .conv (floatingpoint .KOpL (lambda x , y : x .bit_and (y ),
377378 bits_to_check ))
378379 small_result = t .if_else (small_result , 0 )
379- return s .if_else (small_result , g )
380+ return s .if_else (small_result , a . _new ( g . v , k = a . k , f = a . f ) )
380381 else :
381382 assert not zero_output
382383 # obtain absolute value of a
0 commit comments