Actually, the 50% trade check for whether a city will buy a given
tradegood does not use the random number generator at all.
For a given tradegood, approximately half of the cities on the map
will buy it, and half won't. This is set when the tradegood comes
into existence, and is not affected by who is looking for a buyer
city, when they do it, etc.
(The implementation is stateless, it is basically
if ((HASH(sell-city | potential-buy-city | item | secret) & 1) == 0)
city will buy the tradegood
else
city will not buy the tradegood
where MD5 is used for the hash.
)