firth@sei.cmu.edu (Robert Firth) (05/07/87)
Postscript to previous post: raw data
gathered from systems code.
Comparison %
var = 0 18
var >=0 12
var > 0 0
var = const 31
var >(=)const 18
var = var 19
var > var 2
var >=var 1
Each comparison counts both the test and the converse
test, so 'v>0' includes 'v<=0'. The test 'v>const'
includes all 4 forms, since we can always transform
'v>k' into 'v>=(k-1)'. Basically 'var' means "anything
not known at compile time"; I didn't check for things like
IF x > y+1 ...
that can be transformed into IF x>=y.
Gathered from ~12000 lines of BCPL code. Note two
language-dependent sources of bias
(a) strings have a length count not a NUL terminator,
so we have 'i<=length' where C would have 'ch=0'
(b) many library calls return a negative error code
tested for by '<0' comparison
Booleans are represented by (FALSE=>0, TRUE=>allones),
and always tested by treating 0 as FALSE and everything
else as TRUE.
Hope this is informative.