I was helping my daughter Lulu learn programming (she was doing a Lua tutorial) and she asked a question about how big a number the program can handle. I said I don't know and recommended that we find out. We had lots of fun finding the answer.
I told her to try out a really big number. I said to put a 9, then the "to the power of" symbol, then a bunch of 9s. She picked something huge, far above the computer's limit. Then I recommended to try a much smaller number. That was too big. At some point I started suggesting numbers such that we were using Newton's Method to find the solution.
The method is like this:
- choose a high (overflow) and a low (no overflow).
- cut difference in half.
- if overflow, set that as the new high, else if no overflow, set that as the new low.
- if happy with precision of the result, stop.
- Else, repeat from step 2.
Here's a log of her work on this:
2+3
5
2+34
14
2394875324987532497859234875412
9.8668863389486346e+029
9^9
387420489
9^99
2.9512665430652752e+094
9^9999999999999999999999999999999
1/0 --[[math.huge]]
9^9999
1/0 --[[math.huge]]
9^999
1/0 --[[math.huge]]
9^998
1/0 --[[math.huge]]
9^100
2.6561398887587478e+095
9^500
1/0 --[[math.huge]]
9^102
2.1514733098945857e+097
9^250
3.6360291795869935e+238
9^350
1/0 --[[math.huge]]
9^300
1.873927703884794e+286
9^325
1/0 --[[math.huge]]
9^310
6.5339818865072468e+295
9^315
3.8582509641636642e+300
9^320
2.2782586118290021e+305
9^321
2.0504327506461019e+306
9^324
1/0 --[[math.huge]]
9^323
1.6608505280233425e+308
9^323.5
1/0 --[[math.huge]]
9^323.4
1/0 --[[math.huge]]
9^323.1
1/0 --[[math.huge]]
9^323.01
1.6977470088971238e+308
9^323.05
1/0 --[[math.huge]]
9^323.03
1.7740171916785718e+308
9^323.04
1/0 --[[math.huge]]
.9323.005
[string ".9323.005"]:1: malformed number near '.9323.005'
9^323.005
1.6791974321612211e+308
9^323.006
1.6828910624108526e+308
.9^323.010
1.6591015688607133e-015
No comments:
Post a Comment