For example, Chan's algorithm can compute the convex hull of a set of points in O("n" log "h") time, where "n" is the number of points in the input and "h" is the number of points in the resulting convex hull, a subset of the input points. Because every input point "might" be in the convex hull, an analysis in terms of the input alone would yield the less precise O("n" log "n") time. The complexity of some algorithms depends not only on parameters of the input but also parameters of the machine the algorithm is being run on; as mentioned in #Metric being measured below, this is typical in analyzing algorithms that run on systems with fixed cache hierarchies, where the complexity may depend on parameters such as cache size and block size. To analyze an algorithm precisely, one must assume it is being executed by a particular abstract machine. For example, on a random access machine, binary search can be used to rapidly locate a particular value in a sorted list in only O(log "n") comparisons, where "n" is the number of elements in the list; on a Turing machine, this is not possible, since it can only move one memory cell at a time and so requires Ω("n") steps to even reach an arbitrary value in the list. Moreover, different abstract machines define different "primitive" operations, which are operations that can be performed in constant time. Some machines, like Turing machines, only permit one bit at a time to be read or written; these are called bit operations, and the number of bit operations required to solve a problem is called its bit complexity. Bit complexity generalizes to any machine where the memory cells are of a fixed size that does not depend on the input; for this reason, algorithms that manipulate numbers much larger than the registers on ordinary PCs are typically analyzed in terms of their bit complexity. Put another way, the bit complexity is the complexity when the word size is a single bit, where word size is the size of each memory cell and register. Another commonly used model has words with log "n" bits, where "n" is a variable depending on the input. For example, in graph algorithms, it is typical to assume that the vertices are numbered 1 through "n" and that each memory cell can hold any of these values, so that they can refer to any vertex. This is justified in problems where the input uses Ω("n") words of storage, since on real computers, the memory cell and register size is typically selected in order to be able to index any word in memory.