Python interpreting equal values as non-equal -


for part of code, inside for loop

s = 'cl_num = %d, prev_cl_num = %d\n' % (cl_num, prev_cl_num); fd.write( s ); if cl_num != prev_cl_num:     bb.instructions[i].is_cache_miss = 1;     s = 'instruction %x cache miss, cl_num = %d, prev_cl_num = %d, base_cache_line = %d\n' % (bb.instructions[i].address, cl_num, prev_cl_num, base_cache_line);     fd.write( s );     bb.instructions[i].cache_line = cl_num - base_cache_line;     prev_cl_num = cl_num; 

i output, in fd file,

cl_num = 65557, prev_cl_num = 65557 instruction 400558 cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557 cl_num = 65557, prev_cl_num = 65557 instruction 400560 cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557 cl_num = 65557, prev_cl_num = 65557 instruction 400568 cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557 cl_num = 65557, prev_cl_num = 65557 instruction 400570 cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557 

you see, condition cl_num != prev_cl_num gets evaluated true when cl_num equal prev_cl_num. why so?

you have floating point values, write integer portion file:

>>> '%d' % 3.3 '3' 

note how .3 decimal portion has been ignored; %d calls int() on interpolated value.

when writing debugging values, use repr(), or %r in formatting:

s = 'cl_num = %r, prev_cl_num = %r\n' % (cl_num, prev_cl_num); 

repr() on float values formats them if using %17g formatter; 17 decimals shown, scientific notation used when exponent 17 or up.


Comments

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

thorough guide for profiling racket code -