If one wishes to find out whether a computational problem over discrete data is solvable or how complex it is, the classical approach is to represent the discrete objects in question in a suitable way by finite binary strings and to investigate whether or how fast the problem can be solved by an algorithm or a Turing machine operating on these finite strings. But many computation problems are naturally formulated over continuous data, e.g., over real numbers, complex numbers, functions or relations over real numbers.