CSC231 sum of floats.py

From dftwiki3
Revision as of 16:24, 11 December 2012 by Thiebaut (talk | contribs)
Jump to: navigation, search

--D. Thiebaut 20:45, 9 December 2008 (UTC)


# sum_of_floats.py
# D. Thiebaut
# Please use Python V 2.7 to run this program...
#
# generate a list of 10 random real numbers
# sum up the numbers 3 different ways:
#    a) without modifying the list
#    b) after sorting the list in increasing order
#    c) after sorting the list in decreasing order
#
# Typical output:
# List[0] = 7.735545e+036
# List[1] = 6.601143e+024
# List[2] = 5.969324e+024
# List[3] = 2.203093e+017
# List[4] = 7.594234e+009
# List[5] = 1.312106e+006
# List[6] = 3.241121e+004
# List[7] = 3.169280e-001
# List[8] = 3.387630e-019
# List[9] = 2.664266e-022
# sum1 = 7.73554468369732770000e+036
# sum2 = 7.73554468369732890000e+036
# sum3 = 7.73554468369732770000e+036
# 

import random
N = 10

def getSums():
    #--- create a list of 10 random numbers ---
    List = []
    for i in range( N ):
        List.append( random.random() * pow( 10, random.randint( -40, +40 ) ) )

    #--- sum up the list without preprocessing ---
    sum1 = 0
    for item in List:
        sum1 += item

    #--- sum up the list after first sorting it in increasing order ---
    sum2 = 0
    List.sort()
    for item in List:
        sum2 += item

    #--- sum up the list after first sorting it in DEcreasing order ---
    sum3 = 0
    List.reverse()
    for item in List:
        sum3 += item

    return (List, sum1, sum2, sum3)

def main():
    while True:
        #--- compute the sum of the same list 3 different ways ---
        (List, sum1, sum2, sum3) = getSums()

        #--- stop when the 3 sums are not equal ---        
        if ( sum1 != sum2 or sum1 != sum3 or sum2 != sum3 ):
            for i in range( len( List ) ):
                print "List[%d] = %e" % (i,List[i])
            print "sum1 = %1.20e" % sum1
            print "sum2 = %1.20e" % sum2
            print "sum3 = %1.20e" % sum3
            break
        
main()