CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1) The math library file...

46
CSE1222: Lecture 4 The Ohio State University 1

Transcript of CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1) The math library file...

Page 1: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

CSE1222: Lecture 4 The Ohio State University 1

Page 2: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (1) The math library file cmath

Yes, this is a file with definitions for common and often used mathematical functions including:

sine, cosine, log, and square root

Provided by our C++ geniuses (Be thankful!)

Using the math library

Include the following at the top of your program

#include <cmath>

CSE1222: Lecture 4 The Ohio State University 2

Page 3: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (1) How do you use or invoke a function in math?

Specify …

Its name Input parameters

Retrieve its …

Output or answer

Remember y = f(x) from math?

f is the name x is the input parameter y will hold the output

A function has three parts: Name, input, and output

CSE1222: Lecture 4 The Ohio State University 3

Page 4: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (1) The cmath library defines a function called sqrt … What do you

think it does?

Function names are descriptive Function names must be spelled exactly how they are defined in their

defining library (cmath here, so don’t guess! Look it up) You must provide exactly how many input parameters a function is

defined to take A function can output at most one answer only

The square root function : Spelled sqrt Requires exactly one input parameter (a number) Outputs the square root of the input parameter

Question: Where does the output or answer go???

CSE1222: Lecture 4 The Ohio State University 4

Page 5: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (2) This function invocation:

double a = 81;double b = sqrt(a);

Takes the value of the variable a as a single input parameter Executes the computation for a square root “Outputs” its answer in the assignment statement

Rule (Memorize this!): The output value of a function invocation will relace the syntax of the function call in your program during program execution

During execution of this code the second line will execute in the following way:

double b = sqrt(a); <---- Before execution

double b = sqrt(81); <---- Evaluates the input parameter

double b = 9.0; <---- This line uses the rule above

CSE1222: Lecture 4 The Ohio State University 5

Page 6: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (2) Is this program snippet nonsensical … Why or why not?

double a = 81;sqrt(a);

Is there a syntax error, i.e. will it compile?

- No syntax error! But, avoid invoking a function in this way if it outputs a value. You are throwing away the output!

Is there a syntax error? Is it nonsensical?

double a = 81;cout << sqrt(a);

No syntax error! If a function invocation outputs a value, then ensure that the syntax of the function call is used with other code that performs useful work

This statement would output 11

cout << sqrt(121.0) << endl;

CSE1222: Lecture 4 The Ohio State University 6

Page 7: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (2) Is there a syntax error?

double a = 81;double b = sqrt(a);double c = sqrt(sqrt(a)) * b;

No syntax error! A function can be used like a variable of the same data type

Remember our rule regarding the output of a function invocation How is it used here to evaluate the third line?

Here, a is 81, b is 9, and c is 27. Why? The sqrt function is called three separate times in this code snippet Which function is invoked first, which is invoked second, and then which

is invoked third?

CSE1222: Lecture 4 The Ohio State University 7

Page 8: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (3) What does the cmath library function pow do?

Computes ab, where a and b are two numbers Its name tries to tell you what operation the function performs for you

How many input parameters does this function require? We need a base and an exponent, so two input parameters

Does this function output a single answer or no answer? It must return the value for ab, so one answer

For examplecout << pow(3.0, 4.0);

would output 81 which is 3 to the 4th power.

Notice the two input parameters in the parenthesis (comma separated). The base must come BEFORE the power!

CSE1222: Lecture 4 The Ohio State University 8

Page 9: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (4) Arguments passed into any function can be a

constant, variable, or an expression that evaluates to the appropriate data type

For Example,

double j = 2.0;

cout << sqrt(j * 32.0); //outputs 8

Remember, the sqrt function requires exactly one argument

CSE1222: Lecture 4 The Ohio State University 9

Page 10: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mathematical Functions (5) Functions can themselves be part of an

expression

double x = 10;

cout << 5 * pow( (x - 3), 2.0 ); //output?

Remember our rule regarding function output and where it goes?

Remember, the pow function requires exactly two arguments

CSE1222: Lecture 4 The Ohio State University 10

Page 11: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Common Math FunctionsFunction Returned Value Data Type of

Returned Value

abs(a) Absolute value of a Data type of a

pow(b,e) Value of b raised to the eth power float or double

Data type of b

sqrt(a) Square root of a double

sin(a) Sine of a in radians double

cos(a) Cosine of a in radians double

tan(a) Tangent of a in radians double

log(a) Natural log of a double

log10(a) Common log (base 10) of a double

exp(a) e raised to the ath power double

CSE1222: Lecture 4 The Ohio State University 11

Page 12: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Example: sqrt()#include <iostream>#include <cmath>using namespace std;

int main(){ double x(0.0), y(0.0); double dist(0.0);

cout << "Enter x, y: "; cin >> x >> y;

dist = sqrt(x * x + y * y); cout << "Distance of (" << x << "," << y << ") to (0,0) = " <<

dist << endl; return 0;}

// What are we computing here (in plain english)?// Compile and execute after class!

CSE1222: Lecture 4 The Ohio State University 12

Page 13: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> distance.exeEnter x, y: 3 4Distance of (3,4) to (0,0) = 5

> distance.exeEnter x, y: 5 8Distance of (5,8) to (0,0) = 9.43398

CSE1222: Lecture 4 The Ohio State University 13

… cout << "Enter x, y: "; cin >> x >> y;

dist = sqrt(x * x + y * y); cout << "Distance of (" << x << "," << y << ") to (0,0) =

" << dist << endl;

Page 14: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Example 2: sqrt()#include <iostream>#include <cmath> // math function libraryusing namespace std;

int main (){ double height(0), time(0.0);

cout << "Enter height (feet): "; cin >> height;

time = sqrt(2.0 * height / 32.2); cout << "It will take " << time << " seconds to fall "

<< height << " feet. " << endl;

return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 14

Page 15: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> gravity.exeEnter height: 100It will take 2.49222 seconds to fall 100 feet.

> gravity.exeEnter height (feet): 500It will take 5.57278 seconds to fall 500 feet.

CSE1222: Lecture 4 The Ohio State University 15

… cout << "Enter height (feet): "; cin >> height;

time = sqrt(2.0 * height / 32.2); cout << "It will take " << time << " seconds to fall " << height << " feet. " << endl;

Page 16: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Example: log()#include <iostream>#include <cmath>using namespace std;

int main(){ double rate(0.0), years(0.0);

cout << "Enter annual interest rate (percentage): "; cin >> rate;

years = log(2.0) / log(1 + (rate / 100.0)); cout << "Your money will double in " << years << " years." << endl; return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 16

Page 17: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> interest.exeEnter annual interest rate (percentage): 7Your money will double in 10.2448 years.

> interest.exeEnter annual interest rate (percentage): 2Your money will double in 35.0028 years.

CSE1222: Lecture 4 The Ohio State University 17

… cout << "Enter annual interest rate (percentage): "; cin >> rate;

years = log(2.0) / log(1 + (rate / 100.0)); cout << "Your money will double in " << years << " years." << endl;…

Page 18: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Trigonometric Math Functions Read your documentation on functions!

Trigonometric math functions (such as sin, cos, and tan) require input parameters to be in radians

CSE1222: Lecture 4 The Ohio State University 18

Page 19: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Example: sin(), cos()#include <iostream>#include <cmath>using namespace std;

int main(){ double angle(0.0), x(0.0), y(0.0);

cout << "Enter rotation angle (radians): "; cin >> angle;

x = cos(angle); y = sin(angle); cout << "Point (1,0) rotates to point" << "(" << x << "," << y << ")" << endl; return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 19

Page 20: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> rotate_radians.exeEnter rotation angle (radians): 1.57Point (1,0) rotates to point (0.000796327,1)

> rotate_radians.exeEnter rotation angle (radians): 0.78Point (1,0) rotates to point (0.710914,0.703279)

CSE1222: Lecture 4 The Ohio State University 20

… cout << "Enter rotation angle (radians): "; cin >> angle;

x = cos(angle); y = sin(angle); cout << "Point (1,0) rotates to point" << "(" << x << "," << y << ")" << endl;…

Page 21: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Common Math Constants Besides functions, the cmath library file also defines some

commonly used math constants

Use these like variables Though, being “constants” you cannot assign a new value to them

Constant ValueM_PI π, 3.14159…

M_E e, the base of natural logarithms

M_LOG2E Base-2 logarithm of e

M_LOG10E Base-10 logarithm of e

M_LN2 Natural log of 2

M_LN10 Natural log of 10

CSE1222: Lecture 4 The Ohio State University 21

Page 22: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

degrees2radians.cpp#include <iostream>#include <cmath> // cmath contains definitions of math constantsusing namespace std;

int main(){ double degrees(0.0), radians(0.0);

cout << "Enter angle in degrees: "; cin >> degrees;

radians = (degrees * M_PI) / 180.0; // Convert degrees to radians

cout << "Angle in radians = " << radians << endl;

return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 22

Page 23: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

rotate_degrees.cpp#include <iostream>#include <cmath> // cmath contains definitions of math constantsusing namespace std;

int main(){ double degrees(0.0), radians(0.0), x(0.0), y(0.0);

cout << "Enter rotation angle (degrees): "; cin >> degrees;

radians = (degrees * M_PI) / 180.0; x = cos(radians); y = sin(radians); cout << "Point (1,0) rotates to point (" << x << "," << y <<

")" << endl;

return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 23

Page 24: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> rotate_degrees.exeEnter rotation angle (degrees): 90Point (1,0) rotates to point (6.12323e-17,1)

> rotate_degrees.exeEnter rotation angle (degrees): 45Point (1,0) rotates to point (0.707107,0.707107)

CSE1222: Lecture 4 The Ohio State University 24

… cout << "Enter rotation angle (degrees): "; cin >> degrees; radians = (degrees * M_PI) / 180.0; x = cos(radians); y = sin(radians); cout << "Point (1,0) rotates to point" << "(" << x << "," << y << ")" << endl;…

Page 25: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

log_2.cpp#include <iostream>#include <cmath> // cmath contains definitions of math constants

using namespace std;

int main(){ double x(0.0), y(0.0);

cout << "Enter number: "; cin >> x;

y = log(x) / M_LN2; cout << "log_e(" << x << ") = " << log(x) << endl; cout << "log_2(" << x << ") = " << y << endl;

return 0;}

// What are we computing here (in plain english)?

CSE1222: Lecture 4 The Ohio State University 25

Page 26: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Arguments to Math Functions Input parameters (i.e., arguments) to math

functions should have type double

For example,

double x(3.6), y(0.3), z(0.0);

z = sin(1.2);z = sqrt(x);z = log(3.2 * x);z = pow(x / 0.5, 1.2 * y);

CSE1222: Lecture 4 The Ohio State University 26

Page 27: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

logError.cpp. . .int main(){ int value(0);

cout << "Enter value: "; cin >> value;

// log(value) generates a compiler error cout << "At 10% interest, it will take " <<

log(value)/log(1.1) << " years for a $1 investment to be worth $" << value << "." << endl;

return 0;}

CSE1222: Lecture 4 The Ohio State University 27

Page 28: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> g++ logError.cpp –o logError.exeCompiling logError.cpp into logError.exe.logError.cpp: In function 'int main()':logError.cpp:16: call of overloaded 'log(int&)' is ambiguous/usr/include/iso/math_iso.h:52: candidates are: double log(double)/usr/local/include/g++-v3/bits/std_cmath.h:333: long double std::log(long double)/usr/local/include/g++-v3/bits/std_cmath.h:323: float std::log(float)

CSE1222: Lecture 4 The Ohio State University 28

…15. // log(value) generates a compiler error

16. cout << "At 10% interest, it will take " << log(value) / log(1.1)

17. << " years for a $1 investment to be worth $" << value << "." <<

18. endl;

…// What is the problem here? What is the data type for variable “value”?

Page 29: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

logExample.cpp. . .int main(){ int value(0); double x(0.0);

cout << "Enter value: "; cin >> value; x = value; // implicit conversion to double

cout << "At 10% interest, it will take " << log(x)/log(1.1)

<< " years for a $1 investment to be worth $" << value << "." << endl;

return 0;}

// Will this do the trick?

CSE1222: Lecture 4 The Ohio State University 29

Page 30: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

> logExample.cpp

Enter value: 10

At 10% interest, it will take 24.1589 years for a $1 investment to be worth $10.

>

CSE1222: Lecture 4 The Ohio State University 30

double x(0.0);

...

x = value; // implicit conversion to double

cout << "At 10% interest, it will take " << log(x)/log(1.1)

<< " years for a $1 investment to be worth $" << value << "." << endl;

Page 31: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

CSE1222: Lecture 4 The Ohio State University 31

Page 32: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Modulus Operator: % In math a mod b is the remainder after integer a is

divided by integer b

You can think of this operator as a function: 1) name (%), two operands (two integer input parameters), one output (an integer)

In C++ a mod b is written as:a % b

Examples:25 % 3 = ?137 % 10 = ?2751 % 2 = ?

CSE1222: Lecture 4 The Ohio State University 32

Page 33: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Expression Types An expression consists of constants, variables,

and function invocations that output single values and evaluates to a single answer

For example,5 * pow( (x - 3), 2.0 )

An expression that contains only integer operands is an integer expression

An expression that contains only floating point operands is a floating-point expression

CSE1222: Lecture 4 The Ohio State University 33

Page 34: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mixing Expression Types A mixed-mode expression has both

floating-point and integer data types

The rules governing the data type of the result are:

1. If both operands are integers, the result is an integer

2. If one operand is a floating-point number, then the result is a double

CSE1222: Lecture 4 The Ohio State University 34

Page 35: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Mixed Mode Expressions

int a(3);double x(3.5), y(5), z(0.0);

z = 3.0 * 25;z = a * x;z = a * y;

What about:z = x + (a / 2);

CSE1222: Lecture 4 The Ohio State University 35

Page 36: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Exercisesint a(3), b(2);double y(5), z(0.0);

After each operation, what is z?

z = (y + a) / b;z = (y * a) / b;z = y * (a / b);z = (y / b) * (a / b);z = (a + b) / (b * y);

CSE1222: Lecture 4 The Ohio State University 36

Page 37: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

logError.cpp. . .int main(){ int value(0);

cout << "Enter value: "; cin >> value;

// log(value) generates a compiler error cout << "At 10% interest, it will take " << log(value)/log(1.1) << " years for a $1 investment to be worth $" <<

value << "." << endl; return 0;}

CSE1222: Lecture 4 The Ohio State University 37

Page 38: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

logExample2.cpp. . .int main(){ int value(0);

cout << "Enter value: "; cin >> value;

// Mixed mode expression "value * 1.0" returns double. cout << "At 10% interest, it will take " << log(value * 1.0)/log(1.1) << " years for a $1 investment to be worth $" << value << "." << endl; return 0;}

CSE1222: Lecture 4 The Ohio State University 38

Page 39: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

CSE1222: Lecture 4 The Ohio State University 39

Page 40: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Evaluate

What does this express evaluate to?

1 + 3 * 6 – 4 / 2 = ???

Try it out on a sheet of paper

CSE1222: Lecture 4 The Ohio State University 40

Page 41: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Evaluate What does this express evaluate to?

20 – 16 / 2 + 2 * 3 = ???

What if we insert parenthesis in different places?

(((20 – 16) /2) +2) * 3 = 12 ((20 – 16) / (2 + 2)) * 3 = 3 20 – ((16/2) + (2*3)) = -4

CSE1222: Lecture 4 The Ohio State University 41

Page 42: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Operator Precedence and Associativity The minus sign is overloaded

Used as a binary operator for subtractionUsed as a unary operator to negate the sign

How do you know which one you are using?

int a = b – c; <---- Is this negation?int a = - c; <---- Is this negation?

Depends on the context, operator precedence, and associativity rules

CSE1222: Lecture 4 The Ohio State University 42

Page 43: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Operator Precedence and Associativity Expressions are evaluated from left to right

If there is an ambiguity, then operator precedence determines which operators is evaluated first

Precedence Associativity

() Unary -

* / % Left to right

+ - Left to right

CSE1222: Lecture 4 The Ohio State University 43

Page 44: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

arithmetic3.cpp// Precedence of arithmetic operators

#include <iostream>using namespace std;

int main(){ cout << "-3+5*2 = " << -3+5*2 << endl << endl;

// Is this? cout << "((-3)+5)*2 = " << ((-3)+5)*2 << endl; cout << "(-(3+5))*2 = " << (-(3+5))*2 << endl; cout << "(-3)+(5*2) = " << (-3)+(5*2) << endl; cout << "-(3+(5*2)) = " << -(3+(5*2)) << endl; return 0;}

CSE1222: Lecture 4 The Ohio State University 44

Page 45: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Math in C++ Review Use #include<cmath> for math functions

Common math functions: abs(a), pow(b,e), sqrt(a), sin(a), cos(a), tan(a), log(a), log10(a), exp(a)

Common math constants:

M_PI, M_E, M_LN2, M_LN10

CSE1222: Lecture 4 The Ohio State University 45

Page 46: CSE1222: Lecture 4The Ohio State University1. Mathematical Functions (1)  The math library file cmath Yes, this is a file with definitions for common.

Math in C++ Review Arguments to functions should always be

double

Mixed mode operations:

(3.0 + 5) or (3.0 * 5) have type double;

Operator precedence:Multiplication and division before addition and subtraction

CSE1222: Lecture 4 The Ohio State University 46