Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
акустика / bergman_dr_computational_acoustics_theory_and_implementation.pdf
Скачиваний:
163
Добавлен:
04.05.2023
Размер:
2.74 Mб
Скачать

2

Computation and Related Topics

This chapter introduces a collection of topics related to computation, model and simulation development, and code writing, starting with an introduction to floating-point numbers that introduces representations of numbers in bases other than 10 and floating-point representations of numbers. Following this is an introduction to estimating computational cost using O(N) analysis. The next section provides a discussion on simulation fidelity and complexity followed by a simple example of converting an equation to pseudo code. The last section provides a compiled list of open-source alternative to professional software and open-source numerical libraries for C/C++.

2.1 Floating-Point Numbers

2.1.1 Representations of Numbers

A number, x, is represented by a power series in powers of a fixed number b called the base. The power series may be finite or infinite depending on the number:

 

N2

 

x =

anbn

2 1

n = N1

The coefficients in the expansion are given by {an}, and N1 and N2 are the limits of the expansion. Coefficients obey the inequality 0 an < b, and count how many of that power are present in the number. For irrational and rational numbers with infinitely repeating patterns, N1 = . For all other rational numbers, N1 is finite. One typically denotes the number by

writing the coefficients in a sequence without the base explicitly present. A decimal notation is used to separate positive powers from negative powers:

x = aN2 a N2 1 a N2 2 a1a0 a1a2 a 1N1 aN1

(2.2)

Reading the digit sequence from left to right gives the number of each power of the base contained in the series expansion. We grow up learning base 10 and most readers have likely encountered base 2, or binary, representation of numbers. The following notation is used to keep tabs on which base is being used:

x = aN2 a N2 1 a N2 2 a1a0 a1a2 a 1N1 aN1 b

(2.3)

In some cases the parentheses are omitted. As an example, the number (237.4631)10 is represented as a series expansion:

1 × 104 + 3 × 103 + 6 × 102 + 4 × 101 + 7 × 100 + 3 × 101 + 2 × 102

Notice the reversed order of appearance of the coefficients. Now consider the base, b = 2. In terms of a power series expansion, numbers are represented in terms of ones place,” “twos place,” “fours place,and so on. Coefficients in the expansion are bound by the inequality 0 an < 2; hence the coefficients can only be 0 or 1. Table 2.1 provides a list of the integers from 0 to 10 in binary representation.

This example illustrates the value in using notation that references the base. The third row of the right column contains 10, which is not the integer 10 but the binary representation of 2, one in the twos place and zero in the ones place. Using the base notation in (2.3), 710 = 1112, both are representations of the number 7. Numbers between 0 and 1 are represented in terms of negative powers of base 2, that is, a halves place, a quarters place, and so on. A few examples are presented in Table 2.2.

Table 2.1 Binary representation of integers

Integer (base 10)

 

Expansion in base 2

Base 2 representation

 

 

 

 

 

 

0

0

× 20

 

 

0

1

1

× 20

 

 

1

2

0 × 20 + 1 × 21

 

 

10

3

1 × 20 + 1 × 21

 

 

11

4

0

× 20 + 0 × 21

+ 1 × 22

100

5

1

× 20 + 0 × 21

+ 1 × 22

101

6

0

× 20 + 1 × 21

+ 1 × 22

110

7

1

× 20 + 1 × 21

+ 1

× 22

111

8

0

× 20 + 0 × 21

+ 0

× 22 + 1 × 23

1000

9

1

× 20 + 0 × 21

+ 0

× 22 + 1 × 23

1001

10

0

× 20 + 1 × 21

+ 0

× 22 + 1 × 23

1010

Table 2.2 Binary representations of fractions

Fraction (base 10)

 

Expansion in base 2

Base 2 representation

 

 

 

 

0.5

1

× 21

0.1

0.25

0

× 21 + 1 × 22

0.01

0.75

1

× 21 + 1 × 22

0.11

0.125

0

× 21 + 0 × 22 + 1 × 23

0.001

0.375

0

× 21 + 1 × 22 + 1 × 23

0.011

0.625

1

× 21 + 0 × 22 + 1 × 23

0.101

0.875

1

× 21 + 1 × 22 + 1 × 23

0.111

For the example above, fractions that can be expressed with three or fewer coefficients down to 1/8th are presented. Some of the numbers in the table contain the same number of significant figures in both bases. This is serendipitous.

As one final example, consider 5.62510 = 101.1012. This example illustrates the fact that a different number of significant figures is required to express a number in different bases. This is an important fact whose consequences cannot be overlooked, especially in the world of finite precision arithmetic [1]. One consequence is that some fractions may have a finite number of coefficients in one representation while producing an infinite repeating sequence in another representation. The maximum number of coefficients for representing a number that can be stored in memory is restricted, which means that error will necessarily exist when approximating such numbers. Recall how the fraction 1/3 is dealt with in base 10, 0.3333, or 03 to be exact. The bar notation indicates that the sequence repeats an infinite number of times. When using the number in a calculation, it would be truncated, keeping as many places as necessary to maintain the proper number of significant figures in the final answer, for example, 1/3 0.3333. Now consider what would happen if only four significant figures were allowed for a number in any representation. This limitation imposes a new constraint called precision. The last example now reads 5.62510 101.12. Starting with this number in base 10 representation, converting to base 2, truncating to four significant figures, and then converting back to base 10 gives 5.50010, or 5.62510 5.50010. This is not a horrible approximation, but can we do better? Not to this level of precision.

Three more bases commonly used in computer science are septal (base 7), octal (base 8), and hexadecimal (base 16). Coefficients in septal and octal can be represented by their integer values in base 10, 06, and 07, respectively. For hexadecimal, 16 characters are needed for each coefficient. The convention used is that each an takes a value in the set {0, 1, 2, 9, A, B, , F}. Table 2.3 lists the first 16 whole numbers in all representations introduced in this section.

2.1.2 Floating-Point Numbers

The IEEE Std 754-1985 defines a standard for representing various numbers as a sequence of bits called a bit string [2]. To represent arbitrary numbers, a form of base 2 scientific notation is used:

N = 1 Sm × 2E

(2.4)

Table 2.3 Four alternate representations of the first 16 (base 10) integers

Integer (base 10)

Binary

Septal

Octal

Hexadecimal

 

 

 

 

 

1

1

1

1

1

2

10

2

2

2

3

11

3

3

3

4

100

4

4

4

5

101

5

5

5

6

110

6

6

6

7

111

10

7

7

8

1000

11

10

8

9

1001

12

11

9

10

1010

13

12

A

11

1011

14

13

B

12

1100

15

14

C

13

1101

16

15

D

14

1110

20

16

E

15

1111

21

17

F

16

10000

22

20

10

 

 

 

 

 

Table 2.4 Exponent and mantissa widths and exponent bias for floating-point numbers

Type

N

M

Bias

 

 

 

 

Single

8

23

127

Double

11

52

1023

Extended

15

64

16383

Quad

15

112

16383

 

 

 

 

Three quantities specify the number N. S is the sign and can be either (0, 1) for + or , respectively. The number m is called the mantissa and is a binary fraction of the form 1.F. The exponent is given by E. Normalized numbers have the exponent biased depending on the precision. When represented as a bit string, the binary representation of these numbers is placed in the order (S, E, m). In binary notation, the mantissa digits are denoted bi, and the exponent is denoted aj, where the limits on i, j are related to the type, that is, single precision or double precision. A visual representation of the bit string is given as follows:

± a1a2aN b1b2bM

In normalized format the leading bit of the mantissa is 1 and the exponent has a bias of 2N 1 1. The width of the exponent and mantissa along with the bias is listed in for single-, double-, extended-, and quad-precision floating-point number (Table 2.4).

As an example, the single-precision floating-point representation of 3.7 is given as follows:

0 10000000 11011001100110011001100