# Working with Math Routines in C#

Basic math operators—such as plus, minus, and modulus—can

get you only so far. It is only a matter of time before you find that you

need more robust math routines. C# has access to a set of math routines

within the base classes. These are available from within the

`System.Math` namespace. Table 1 presents a number of the math

methods available.

The `Math` class is sealed. A sealed class cannot be used

for inheritance. Additionally, all the classes and data members are

static, so you can’t create an object of type `Math`. Instead,

you use the members and methods with the class name.

Table 1: Math Routines in the `Math`

Class

 Method Returns `Abs` Returns the absolute value of a number. `Ceiling` Returns a value that is the smallest whole number greater than or equal to a given number. `Exp` Returns E raised to a given power. This is the inverse of Log. `Floor` Returns a value that is the largest whole number that is less than or equal to the given number. `IEEERemainder` Returns the result of a division of two specified numbers. (This division operation conforms to the remainder operation stated within Section 5.1 of ANSI/IEEE Std. 754-1985; IEEE Standard for Binary Floating-Point Arithmetic; Institute of Electrical and Electronics Engineers, Inc; 1985.) `Log` Returns a value that is the logarithmic value of the given number. `Log10` Returns a value that is the base 10 logarithm of a given value. `Max` Returns the larger of two values. `Min` Returns the smaller of two values. `Pow` Returns the value of a given value raised to a given power. `Round` Returns a rounded value for a number. You can specify the precision of the rounded number. The number .5 would be rounded down. `Sign` Returns a value indicating the sign of a value. 1 is returned for a negative number, 0 is returned for zero, and 1 is returned for a positive number. `Sqrt` Returns the square root for a given value. `Acos` Returns the value of an angle whose cosine is equal to a given number. `Asin` Returns the value of an angle whose sine is equal to a given number. `Atan` Returns the value of an angle whose tangent is equal to a given number. `Atan2` Returns the value of an angle whose tangent is equal to the quotient of two given numbers. `Cos` Returns a value that is the cosine of a given angle. `Cosh` Returns a value that is the hyperbolic cosine for a given angle. `Sin` Returns the sine for a given angle. `Sinh` Returns the hyperbolic sine for a given angle. `Tan` Returns the tangent of a specified angle. `Tanh` Returns the hyperbolic tangent of a given angle.

The `Math` class also includes two constants:

`PI` and `E`. `PI` returns the value of

[PI] as `3.14159265358979323846`. The `E` data

member returns the value of the logarithmic base,

`2.7182818284590452354`.

Most of the math methods in Table 1 are easy to understand. Listing 1

presents a couple of the routines in use.

Listing 1: MathApp.cs — Using Some of the Math

Routines

``` 1:  //  MathApp.cs - Using a Math routine
2:  //-----------------------------------------------
3:  using System;
4:
5:  class MathApp
6:  {
7:     public static void Main()
8:     {
9:        int val2;
10:        char disp;
11:
12:        for (double ctr = 0.0; ctr <= 10; ctr += .2)
13:        {
14:           val2 = (int) Math.Round( ( 10 * Math.Sin(ctr))) ;
15:           for( int ctr2 = -10; ctr2 <= 10; ctr2++ )
16:           {
17:              if (ctr2 == val2)
18:                 disp = 'X';
19:              else
20:                 disp = ' ';
21:
22:              Console.Write("{0}", disp);
23:           }
24:           Console.WriteLine(" ");
25:        }
26:     }
27:  }
```

The following is the output:

```          X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
```

This listing maps out the `Sin` method. A `for`

statement in Lines 12 to 25 loops through double values, incrementing

them by `.2` each iteration. The sine of this value is

obtained using the `Math.Sin` method in Line 14. The sine is a

value from `1.0` to `1.0`. To make the display

easier, this value is converted to a value from `10` to

`10`. This conversion is done by multiplying the returned sine

value by 10 and then rounding the value with the `Math.Round`

method.

The result of doing the multiplication and rounding is that

`val2` is a value from `10` to `10`. A

`for` loop in Line 15 displays a single line of characters.

This line of characters is spaces, with the exception of the character in

the position equal to `val2`. Line 24 prints another space to

start a new line. The result of this work is a rough display of a sine

curve.

# # #