Elementary Functions, Algorithms and Implementation, 2nd Edition

Elementary Functions, Algorithms and Implementation, 2nd Edition
复制标题

DOI:
10.1007/978-1-4899-7983-4
复制
发表时间:
2006
期刊:
--
影响因子:
--
通讯作者:
--
中科院分区:
其他
文献类型:
--
作者:

文献摘要

被引文献

相似文献

This book is devoted to the computation of the elementary functions. Here, we call elementary functions the most commonly used mathematical functions: sin, cos, tan, sin− 1, cos− 1, tan− 1, sinh, cosh, tanh, sinh− 1, cosh− 1, tanh− 1, exponentials, and logarithms (we should merely say “elementary transcendental functions”: from a mathematical point of view, 1/x is an elementary function as well as ex. We do not deal with the basic arithmetic functions in this book). Theoretically, the elementary functions are not much harder to compute than quotients: it was shown by Alt [5] that these functions are equivalent to division with respect to Boolean circuit depth. This means that, roughly speaking, a circuit can output n digits of a sine, cosine, or logarithm in a time proportional to log n (see also Okabe et al.[368], and Beame et al.[32]). For practical implementations, however, it is quite different, and much care is necessary if we want fast and accurate elementary functions. This topic has already been dealt with, among others, by Cody and Waite [93], and Hart et al.[225], but at times those functions were implemented in software only and there was no standard for floatingpoint arithmetic. Since the Intel 8087 floating-point unit, elementary functions have sometimes been implemented, at least partially, in hardware, a fact that induces serious algorithmic changes. Even if now, for general-purpose computing, software is favored because of its versatility, there is still a clear need of hardwired functions for implementation on special-purpose architectures. Furthermore, the emergence of high-quality arithmetic standards (such as the IEEE-754 standard for floating-point arithmetic), and the decisive work of mathematicians and computer scientists such as W. Kahan, W. Cody, H. Kuki, P. Markstein, and P. Tang have accustomed users to very accurate results. Twenty years ago a library providing elementary functions with one or two incorrect bits only was considered adequate [37], but current circuit or library designers must build algorithms and architectures that are guaranteed to be much more accurate (at least for general-purpose systems). A few libraries even offer correctly rounded functions: the returned result is always equal to the machine number nearest the exact result. Among the various properties that are desirable, one can cite the following:· speed;· accuracy;· reasonable amount of resource (ROM/RAM, silicon area used by a dedicated hardware, even power consumption in some cases…);· preservation of important mathematical properties such as monotonicity, and symmetry. As pointed out by Silverstein et al.[425], monotonicity failures can cause problems in evaluating divided differences;
This book is devoted to the computation of the elementary functions. Here, we call elementary functions the most commonly used mathematical functions: sin, cos, tan, sin− 1, cos− 1, tan− 1, sinh, cosh, tanh, sinh− 1, cosh− 1, tanh− 1, exponentials, and logarithms (we should merely say “elementary transcendental functions”: from a mathematical point of view, 1/x is an elementary function as well as ex. We do not deal with the basic arithmetic functions in this book). Theoretically, the elementary functions are not much harder to compute than quotients: it was shown by Alt [5] that these functions are equivalent to division with respect to Boolean circuit depth. This means that, roughly speaking, a circuit can output n digits of a sine, cosine, or logarithm in a time proportional to log n (see also Okabe et al.[368], and Beame et al.[32]). For practical implementations, however, it is quite different, and much care is necessary if we want fast and accurate elementary functions. This topic has already been dealt with, among others, by Cody and Waite [93], and Hart et al.[225], but at times those functions were implemented in software only and there was no standard for floatingpoint arithmetic. Since the Intel 8087 floating-point unit, elementary functions have sometimes been implemented, at least partially, in hardware, a fact that induces serious algorithmic changes. Even if now, for general-purpose computing, software is favored because of its versatility, there is still a clear need of hardwired functions for implementation on special-purpose architectures. Furthermore, the emergence of high-quality arithmetic standards (such as the IEEE-754 standard for floating-point arithmetic), and the decisive work of mathematicians and computer scientists such as W. Kahan, W. Cody, H. Kuki, P. Markstein, and P. Tang have accustomed users to very accurate results. Twenty years ago a library providing elementary functions with one or two incorrect bits only was considered adequate [37], but current circuit or library designers must build algorithms and architectures that are guaranteed to be much more accurate (at least for general-purpose systems). A few libraries even offer correctly rounded functions: the returned result is always equal to the machine number nearest the exact result. Among the various properties that are desirable, one can cite the following:• speed;• accuracy;• reasonable amount of resource (ROM/RAM, silicon area used by a dedicated hardware, even power consumption in some cases…);• preservation of important mathematical properties such as monotonicity, and symmetry. As pointed out by Silverstein et al.[425], monotonicity failures can cause problems in evaluating divided differences;