user2898543
user2898543

Reputation: 33

Why is it much slower to print an answer to a calculation when compared to just computing it?

I'm computing the answer for some very big division questions and wonder why b=a/c (where a and c and both positive whole numbers) is so must faster to figure out than when you type the questions and ask that the answer be printed: b=a/c is way faster than b=a/c followed by print b.

Very slow:

from datetime import datetime - startTime = datetime.now()
a=2**1000000-3
b=a/13
print b
print(datetime.now()-startTime) 

but without the print b it is very fast. I later typed in c=a%13 to see if anything was actually happening (I'm still pretty new to programming) and it is very fast when I type in print c (without the print b code).

Upvotes: 3

Views: 160

Answers (3)

Loïc Faure-Lacroix
Loïc Faure-Lacroix

Reputation: 13600

As far as I understand, IO operations are slow and printing to the screen is like writing to a file and it is going to block the thread for some time.

As someone pointed out, conversion from number to string could be taking time too. Whenever I have to measure time of something. I measure the time of the calculation and print any kind of result after measuring time.

To make the program even faster, but memory hungry, you could save every result in a list and then compile one big string and print only once.

Repetitive call to print take more time than one big call to print.

from datetime import datetime

startTime = datetime.now()

a=2**1000000-3
b=a/13

elapsedTime = datetime.now() - startTime

print "Elapsed time %s\n Number: %s" % (elapsedTime, b)

Upvotes: 2

alexius
alexius

Reputation: 2576

You're trying to output pretty big number (about 10^300000) – it takes time to convert it to decimal format from binary (I guess need to do about 300000 divisions for this, internally numbers are stored in binary format). If you really need to output whole number in decimal format – I don't think you can speed it up a lot. But you can quickly print number in hex or binary format:

hex(b)
bin(b)

You can use Decimal type to store numbers in decimal format internally but calculations with this type could be much slower.

Upvotes: 2

s5s
s5s

Reputation: 12134

IO is slow as people have pointed out. When doing IO, you do not know how your process will get scheduled - it will probably be put on a waiting queue. I am not sure what you're timing but simple engineering logic will dictate that you will want to make the IO a small portion of the overall run time (i.e. insignificant). So I suggest you do 1*10^6 divisions (the more the better) and then do IO assuming you are testing just the mathematics. Note that you are involving how computers and OS work in your calculations.

Upvotes: 0

Related Questions