cosc 1306—computer science and programming floating-point numbers jehan-françois pâris...

59
COSC 1306—COMPUTER SCIENCE AND PROGRAMMING FLOATING-POINT NUMBERS Jehan-François Pâris [email protected]

Upload: bethany-hamilton

Post on 24-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

COSC 1306—COMPUTER SCIENCE AND PROGRAMMING

FLOATING-POINT NUMBERS

Jehan-François Pâ[email protected]

Floating point numbers

• Three main differences with integer numbers– Cannot handle well extremely large or

extremely small values– Limited precision

• Can manipulate trillions of dollars but results are not exact to the cent

– Must specify number of decimals

Limited precision# precision.py""" floating-point computations can be inaccurate"""alpha = 5E9delta = 5E-9beta = alpha + deltagamma = beta - alphaprint ('delta = ' + str(delta) + ' but gamma = ' +

str(gamma))

The output

delta = 5e-9 but gamma = 0.0

• Why?– Computations are carried out with a limited

number of significant bits• Result has a limited number of significant

digits• Be careful when computing very small differences

between two numbers

Note

• Limitations on floating point number size and precision are– Hardware dependent– Shared by most programming languages

• Unlike Python, most programming languages do not support arbitrary-size integers– Python is better

Displaying floating point numbers

• Easiest way to specify number of decimal places is string interpolation– 'Answer is %.nf ' %x does two things

• It inserts the value of x inside the string• It specifies that the string representation of

x should have n decimal places

Example (I)

• pi = 3.1415917

print('pi equals %.1f‘ % pi )print('pi equals %.2f' % pi )print('pi equals %.3f' % pi )print('pi equals %.4f' % pi )

Example (II)

• Program prints

pi equals 3.1pi equals 3.14pi equals 3.142pi equals 3.1416

• Values are nicely rounded

Converting oF into oC (I)

#F2CF.py"""converts fahrenheit degrees into celsius degrees"""fahrenheit =float(input('Enter a temperature in

degrees Fahrenheit: '))celsius = (fahrenheit - 32)*5/9print('%.1f degrees F equals %.1f degrees C' %

(fahrenheit, celsius))

Converting oF into oC r (II)

• Output is

Enter a temperature in degrees Fahrenheit: 100100.0 degrees F equals 37.8 degrees C

More about string interpolation

• Can interpolate– Floating-point numbers in scientific notation

• >>> c = 300000>>> print('c = %.3e km/s'% c)c = 3.000e+05 km/s

– Integers using %d– Strings using %s

Example (I)

• # interpolate.py""" silly demo"""name = input("What's your name?")nclasses=int(input('How many classes are you taking? '))print ('%s is taking %d classe(s)' %(name, nclasses))

Example (II)

• Output is:

What's your name? BillHow many classes are you taking? 5Bill is taking 5 classe(s)

Using the proper quotes

• We had to use double quotes (") inname = input("What's your name?")

because the string contained an apostrophe (')• we could have "escaped" the apostrophe as in

name = input('What\'s your name?')

More escapes

• Escape sequence Meaning\' Apostrophe\" Double quote\\ Backslash\n Newline\r Carriage return

• (See page 86)

Escaping the percent sign

• Not required in normal strings

>>> print("Use the %.3f format")Use the %.3f format

• Required when we use string interpolation

>>> print("Use %%.3f to print %.3f" % 3.1416)Use %.3f to print 3.142

Boolean type

• Two values:– True and False

• Created as– Result of a comparison: ==, !=, >, >=, <, <=– Conversion using bool(…) function

• Zero values and anything empty converts into a False

• Anything else converts into a True value

Examples

>>> a = 3

>>> b = 5

>>> p = (a < b)

>>> q = (b <= a)

>>> print("p = " + str(p) + “ and q = " +str(q))

p = True and q = False

Boolean operations (I)• AND:

– True if both operands are true

a b a and b

F F F

F T F

T F F

T T T

This is called a truth table

Boolean operations (II)• OR:

– True unless both operands are false

a b a or b

F F F

F T T

T F T

T T T

Boolean operations (III)• NOT:

– True if operand is false

a not a

F T

T F

Boolean operations (IV)• Equality/Mutual Implication:

– True when both operands are equal– Represented by a == sign

a b a==b

F F T

F T F

T F F

T T T

Boolean operations (V)• Inequality/Exclusive OR (XOR):

– True when operands are not equal– Represented by a != sign

a b a!=b

F F F

F T T

T F T

T T F

Notes

• XOR is used for – Generating parity bits– Hardware hashing

Examples

• Assuming P is True and q is False>>> p or qTrue>>> p and qFalse>>> not pFalse>>> p != qTrue

Variables and objects

• Variables point to objects– Integers– Strings– Floating-point numbers

What is an object?

• Short for data object• Example: dates

– Cannot add two dates but can compute their difference

– Can initialize date– Can compute weekday(date) – Special date today()– Multiple ways to convert a date into a string

Definition

• An object is an instance of a specific class on which class-specific operations called methods are defined

• So if an object is of the type date, we will define– A method to initialize a date– A method pr a function to compute the

difference of two dates– …

String methods

• These methods never modify the string they apply to!

• See pages 90 to 95 of text– Do not memorize them (yet) please!

• One example– s.capitalize():

capitalizes the first letter of the string and converts all other letters to lower case

Examples (I)

>>> a = 'bill'>>> a.capitalize()'Bill'>>> b = 'Bill'>>> b.capitalize()'Bill'

Examples (II)

>>> c = 'bILL'>>> c.capitalize()'Bill'>>> d ='Billy Bob'>>> d.capitalize()'Billy bob‘

Better but not perfect

– s.title():capitalizes the first letter of each word in the string and converts all other letters to lower case as in the title case • Defines words in a very crude fashion

Examples (I)

>>> s = 'biLLy Bob'>>> s.title()'Billy Bob'>>> s ='jehan-francois'>>> s.title()'Jehan-Francois'>>> s.title()

Examples

>>> s = "dean's list">>> s.title()"Dean'S List">>> s"dean's list">>>

Dollars into bills revisited (I)

# dollars2bills.py""" This program prompts repeatedly for a value in

dollars and converts it into its equivalents in twenty, ten, five and one dollar bills. It terminates when the user enters a zero value

"""

Dollars into bills revisited (II)

# amount is the dollar amount we enter# ntwentys is number of $20 bills we need# ntens is number of $10 bills we need# nfives is number of $5 bills we need# nones is number of $1 bills we need# outstr is our output string

Dollars into bills revisited (III) amount = int(input("Enter an integer amount of dollars: "))while amount != 0 : outstr = '$' + str(amount) + ' is same as ' ntwentys = amount // 20 if ntwentys != 0 : outstr = outstr + str(ntwentys) + ' $20 bill(s) ' temp = amount % 20 ntens = temp // 10 if ntens != 0 : outstr = outstr + 'and ' + str(ntens) + ' $10 bill(s) '

Dollars into bills revisited (IV) temp = temp % 10 nfives = temp // 5 if nfives != 0 : outstr = outstr + 'and ' + str(nfives) + ' $5 bill(s) ' nones = temp % 5 if nones != 0 : outstr = outstr + 'and ' + str(nones) + ' $1 bill(s) ' outstr.replace('as and', 'as') print(outstr) amount = int(input("Enter an integer amount of dollars:

"))print('Goodbye!')

Outputs

Enter an integer amount of dollars: 20$20 is same as 1 $20 bill(s) Enter an integer amount of dollars: 7$7 is same as 1 $5 bill(s) and 2 $1 bill(s) Enter an integer amount of dollars: 35$35 is same as 1 $20 bill(s) and 1 $10 bill(s) and 1 $5 bill(s) Enter an integer amount of dollars: 0Goodbye!

Useful shorthand

• Can replace a = a + … by a += … b = b – … by b –= … c = c * … by c *= …

• Cannot use i++, i --, ++i , --i constructs of C++i read as +(+i) = i--i read as –(–i)• Does not work!

Examples (I)

>>> i=1>>> i += 1>>> print(i)2>>> i++SyntaxError: invalid syntax>>> ++i2

Examples (II)

• In the preceding program we could have written

outstr += str(ntwentys) + ' $20 bill(s) ' … outstr += 'and ' + str(ntens) + ' $10 bill(s) ' … outstr += 'and ' + str(nfives) + ' $5 bill(s) '

… outstr += and ' + str(nones) + ' $1 bill(s) '

Operator precedence (I)

• Recall the rules of precedence of arithmetic and algebra

• From highest to lowest– Exponentiation (**)– Unary + and – – Multiplication, divisions and remainder (*, / ,//, %)– Addition and subtraction (+ and -)

Operator precedence (II)• Python extends these rules to other operators• From highest to lowest

– All arithmetic operations – All comparison operators (==, !=, <, …)– Boolean not– Boolean and (like multiplication)– Boolean or (like addition)

Examples

• x**2*2 + 4*x is same as((x**2)*2) +( 4*x)

• (x + 3)/4 + 2 is same as((x + 3)/4) + 2

Examples

• Allows us to writeif a < b and c < d :forif (a < b) and (c < d ):

• Allows us to writea and b or not cfor(a and b ) or (not c)

A common sense rule

• Some expressions such asa*x**2 + b*x + cdo not need parentheses

• Nobody has ever been fired for writingif (a < b) and (c < d ):or even(a and b ) or (not c)

• It is always better to play safe!

How our programs are translated

• Our programs are not written in machine language– Cannot be directly executed by any computer– Must be first translated

• Two approaches –Compiled languages– Interpreted languages

Compiled languages (I)

• Programs written in Fortran, C, C++ and so on go to a program that translates them into directly executable code– The compiler

• Doinggcc myprogram.c –o myprogramproduces an executable file called myprogram that can run anytime

Compiled languages (II)

C program

C compiler

Executable

Advantages

• The executable can run on any computer with– Same CPU instruction set– Same—or compatible—operating system

• We can sell copies of the executable without revealing the secrets of our program– Reverse engineering is possible but very

time-consuming

Intellectual Property Issues (I)

• Law protects programs in two ways– They can be trade secrets

• Protection ends once secret is revealed.– The can be copyrighted

• Only protects expressions of an idea• Others can write a program doing the same

things are your program using different instructions

Intellectual Property Issues (II)

• Selling C programs or Python programs is avery risky proposition– Invites imitators

• Best solution is – Selling copies of executables

• Properly obfuscated– Keeping source code secret

Interpreted languages (I)

• Languages like Basic, Perl, Python and Ruby are not compiled– Translated into bytecode before being

executed– Bytecode is interpreted by the language

interpreter

Interpreted languages (II)

Python Interpreter:translates program into bytecode

then executes it

Python Program Bytecode

Advantages

• Platform independence:– Bytecode can run on any platform for which

there is an interpreter • Dynamic typing:

– Same variable can refer to a string then an integer then …

• Smaller executable sizes

Disadvantages• Portability limitations :

– Bytecode will not run run on any machine on which the interpreter was not installed.

• Speed:– Bytecode is not optimized for a specific architecture– Just-in-time compilation introduces delays

• Cannot sell a copies of a program without revealing its source code

A partial solution

• In many cases, speed is not an issue outside of loops than get executed thousand and thousands of times

• Loops inside other loops

• Can rewrite code for these inner loops in C and include this code into a Python program– Use Python C API

Neither fish nor fowl

• Java is compiled– Like Fortran, C, …

into bytecode– Like Perl and Python

• Bytecode is executed by Java Virtual Machine