571: Can't Sleep
Title text: If androids someday DO dream of electric sheep, don't forget to declare sheepCount as a long int.
Cueball is in bed and is having trouble sleeping. He tries the old standby of counting sheep as they jump over a fence, but upon reaching 32,767 sheep, 65535 sheep jump back over the fence and start counting up again from -32,768. This is a reference to an integer overflow, when an increasing amount (sheep in this case) suddenly overflows and shows up as a negative value. This is because when a whole number or integer is represented in a digital form, such as on a computer, the number's range is limited by the amount of space used to store it. When the greatest possible number given the storage space is exceeded, an arithmetic overflow occurs, which may result (depending on the used language among other things) in starting over at the least possible number given the storage space, similar to a car's odometer. Imagine an odometer with six digits reaching 999999. Upon driving one more mile or km, the digits will roll back over to 000000. Causing or failing to prevent integer overflow is a common mistake by programmers that may have software security consequences. Some languages like C/C++ even leaves the signed integer overflow undefined behavior, it may or may not wrap to the beginning, the instruction can be ignored or may cause the software to crash.
In this case, the least and greatest possible numbers are -32,768 and 32,767, which implies that the storage space used would be 16 bits. In addition, it's clear that the number is designated as a signed number, meaning that it can be either positive or negative.
However, even if Cueball had this limitation, it would never actually pose a problem. By 32,767 sheep, at a rate of one sheep per second, Cueball has been counting for 9.101 hours (or about 9 hours 6 minutes). This would signify that he has extreme insomnia and probably needs treatment, and also that he has spent the entire night counting, and therefore would just get up and start the day rather than count sheep all over again from -32,768.
The title text refers to the 1968 Philip K. Dick science fiction novel Do Androids Dream of Electric Sheep?, which was adapted into the perhaps more widely known Ridley Scott directed 1982 film Blade Runner. The implication is that if we ever do create androids that dream of electric sheep, we should make sure to give them sufficient storage space to store numbers large enough such that an arithmetic overflow will be far less likely to occur, even if they count for a long time. A "long int" depends on machine architecture, but it typically consists of four bytes rather than two, so instead of being limited to a range from -32,768 to 32,767 the number will be capable of storing numbers from -2,147,483,648 to 2,147,483,647, which would take 68.1 years to exhaust (at the rate of 1 sheep/sec). "sheepCount" is a possible name for a variable to be used in a computer program. Declaring a variable tells the computer that it should allocate a portion of memory to be associated with the variable name given. No spaces are used because variables cannot contain spaces, for a reason that would take a little too long to properly explain here.
- [Cueball is in bed, presumably trying to sleep. The top of each panel is a thought bubble showing sheep leaping over a fence and Cueball's counting and the sheeps baaing is written above the sheeps. Two sheep are jumping from left to right in the first panel.]
- 1... 2...
- Sheep: Baaa
- [Two sheep are jumping from left to right. Cueball is holding his pillow.]
- ... 1,306... 1,307...
- Sheep: Baaa
- [A whole flock of sheep (nine visible) is jumping over the fence from right to left; the first and last sheep is cut off at the edge of the frame. Cueball is now sitting up looking up at his thought bubble.]
- ... 32,767 ...-32,768...
- Sheep: Baaa baaa baaaa baaa ba
- Cueball: ?
- [Two sheep are again jumping from left to right. Cueball is holding his pillow over his head.]
- ...-32,767... -32,766...
- Sheep: Baaa
add a comment! ⋅ add a topic (use sparingly)! ⋅ refresh comments!