import itertools
import math

# to use input Python3 style in Python2
try:
    input = raw_input
except:
    pass

# margin to consider floating point numbers equal
delta = 1E-6

#A program to determine how long it takes for an investment to double
def main():
    I=float(input("Enter annualized interest rate as a percent: "))/100.
    # with generator
    increase = 1+I
    time_to_double = next(n for n in itertools.count() if increase**n > 2)
    print('Time to double by generator is:', time_to_double)
    # exactly by logarithm
    print('Years to exactly double by logarithm: %.3f' % math.log(2, increase))
    assert increase ** math.log(2, increase) - 2 < delta
main()

Specialties:
IT/Science/Contracts/Religious translation/interpreting FIN-ENG-FIN
Python programming

1
Contributor
1
Reply
2
Views
5 Years
Discussion Span
Last Post by pyTony
0

That assert check should of course be:

assert abs(increase ** math.log(2, increase) - 2) < delta

ie taking absolute value, otherwise any negative value would pass.

Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.