cosc 1306—computer science and programming floating-point numbers jehan-françois pâris...
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 (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
Examples
• Assuming P is True and q is False>>> p or qTrue>>> p and qFalse>>> not pFalse>>> p != qTrue
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
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()
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 (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
• 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
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