This text gives a description of the fundamental mathematical concepts used by computer scientists, while also emphasizing the need for careful justification. It provides proofs of all the major results, and all the algorithms presented are developed carefully and their performance analyzed. Throughout, the aim is to provide a well-balanced treatment of both the discrete and continuous mathematics that should be studied by the serious student of computer science. The book should therefore be most suited to those undergraduate programmes that put the emphasis on such areas as programming language semantics, program correctness, and algorithm analysis and design.