Read The Theory of Games Online
Authors: Ezra Sidran
There’s an old programmer’s joke that describes the differences between the computer languages BASIC and ‘C’. It goes like this:
If you tell a BASIC program to drive off a bridge, it says:
-> Illegal bridge-driving statement, line 73, execution terminated.
And nothing bad happens.
However, if you tell a ‘C’ program to drive off a bridge, it begins execution without any error checking at all. Then at some random point the computer crashes and displays this error message:
Excess water in passenger compartment.
Press any key to reboot.
Nerd humor is like that: a bit obtuse but there is often a painful kernel of truth buried inside.
So the program crashed and I rebooted and I made a change and ran it again and it crashed again and I rebooted again and all the time my wristwatch ticked off the seconds of Bill’s and my life and the Angel of Death circled closer.
“So why did you use this ‘C’ computer language if it crashes all the time?” the Authoritarian Man asked.
I explained, “Because ‘C’ runs so damn fast. It’s able to crunch the millions of bytes of data that make up the 3D database. If I had written the program in anything else we would still be waiting for it to get through the first thousand bytes. ‘C’ is a hot-rod language. If you’ve got to hump millions of bytes of data in the shortest possible time you write it in ‘C’. The reason that it’s so fast is that it doesn’t do any error checking. The very thing that makes it fast it what makes it so volatile.”
“Oh.” said the Authoritarian Man.
It was very close to the end of Finley’s watch – just going on to 30 straight hours - when I found it, or I should say, the program found it. The program found the one thing that didn’t belong.
I blinked and rubbed my eyes and looked at the output again. It was just one line on the screen.
It made perfect sense; those fucks.
I turned to Finley and said, “Go tell Stanhope I found it.” Finley looked at me with uncomprehending eyes. “Go tell Stanhope I found the fucking bug,” I repeated.
Finley was frantic; I could see by the way his eyes darted towards the door – his eyes were Finley’s tells – that his first thought was to run out of the room (which was fine by me because Bill and I would have been out of there right after him) but then he collected his thoughts and moved over in front of the security cam, keeping his .45 pointed directly at my face the whole time, and started waving frantically.
Not even ninety seconds later, Stanhope walked into the room.
CHAPTER 4.1O
Stanhope was smiling - beaming like a Cheshire cat - his ship had come in. He strutted over to the external pacemaker programmer and waved his hands over the keyboard, pretending to send the code to shut down Bill’s pacemaker. Bill did not snarl; Bill did not let out a sound. The hair on Bill’s shoulders stood straight up; Bill was coiled like a 135 pound spring. Bill was focused.
“So you found our little problem, did you?” Stanhope jauntily inquired.
I walked from behind the table towards Stanhope. “I found it,” I said.
“And?” Stanhope waited for me to respond.
I got right up in Stanhope’s face. “It was a fucking decimal point! It was a goddamn period! It’s what we call a floating point error in your goddamn database! YOU DESTROYED MY LIFE! YOU KILLED NICK! YOU WERE GOING TO KILL BILL! AND FOR WHAT! FOR A FUCKING DECIMAL POINT! YOU STUPID SONOFABITCH!” And at that moment time stopped.
I don’t know how Bill did it.
It must have been how he got out of the cage at the University of Illinois Veterinary Teaching Hospital the day of his surgery; but somehow he sprung the lock and it all happened so fast but it was all in slow motion, too.
I saw a dark brown blur that was Bill leaping from the cage and his jaws fastened on the back of Stanhope’s neck and Bill tore into that motherfucker’s flesh. A fountain of bright red blood, fresh from Stanhope’s lungs, pumped from the severed carotid artery and I could hear Stanhope scream in anguish and the sound of Bill crunching through the first dorsal vertebra.
I turned towards Finley, whose eyes were ever widening, but the signals from his brain weren’t going anywhere and I grabbed his head by the ears with both of my hands and smashed his face as hard as I could into my knee. I couldn’t feel a thing but I heard the sound of his nasal bone being driven deep into his brain.
At that moment – it must have been some involuntary final, dying reflex of Stanhope’s, his index finger must have convulsed, contracted upon the trigger of the .45 – I heard the explosion of the shot before I felt the burning pain. The slug tore through my back, just missing my spine and leaving my body it smashed into the table just to the right of where I had left Finley’s crumpled, bleeding body.
I turned, and twisted, and fell in slow motion.
I could see that Stanhope was also falling, ever so slowly to the ground, and Bill had now fastened upon his throat, from which he was tearing great hunks of cartilage and meaty flesh from Stanhope’s body and there was no doubt that that sonofabitch was dead.
Bill’s muzzle was soaked in blood and his eyes were bright and his jaws continued to rip away at Stanhope’s corpse.
I fell hard upon the table and with every beat of my heart I pumped more blood from my wounds. “Bill,” I gasped, “Bill he’s dead. Help me.”
Bill left Stanhope and ran to my side. “We’ve got to get out of here, Bill.” Bill began to lick at my blood but it would not stop flowing. I looked around for anything I could stuff into my wounds. I tore off Finley’s shirt and made a bandage.
“Okay, Bill, we’ve got to get out of here. You lead; I’ll follow.”
Bill looked up at me and he
was in charge
. Bill was in charge in a crisis like I wished all my life I could have been. Bill will get us home. I held on to his collar and Bill pulled me from the room and the Angel of Death had to settle for Stanhope and Finley because he wasn’t going to collect Bill and me. Not today.
I had no idea where we were in the labyrinth of corridors in Site-R under the mountain. Maybe Bill could smell fresh air; I don’t know. Bill dragged me on and I just held on for dear life. We were both leaving a trail of blood - like a sanguinary Hansel and Gretel - along the hallways.
Bill found a way out. It wasn’t the way we had come in. There was another exit – I know now – to the north, called Portal D. When we made it out, it was dark. We stumbled into the sweet night air and fell down the embankment to the two-lane highway below. That’s the last thing I remember before I woke up, here, strapped to this gurney in this room with you, the Authoritarian Man.
“A Pennsylvania State Trooper found the two of you the next morning; just before dawn,” the Authoritarian Man said. “Your dog wouldn’t let anybody come within twenty meters of you. They had to hit him, twice, with tranquilizer darts.”
“Well now you know everything I know,” I said to the Authoritarian Man. “That’s all there is to the story. Now you know how Bill killed the man who wanted to be dictator and how Bill saved the world. Do you think tomorrow you could let Bill and me go out to that garden?” No sale unless you ask.
“Yeah,” said the Authoritarian Man, “I think that would be okay.”
Sale!
Tomorrow Bill and I will be free.
CHAPTER 5.O
The Authoritarian Man began a new interrogation. He simultaneously pressed the play and record buttons on the tape deck. “This is an interview with Ms. Katelynn Margaret O’Brian,” he said into the microphone and then added the date and time. “Let’s start on the day that Jakob Grant flew out to Washington,” the Authoritarian Man began and then he picked up an ice bag from the table and placed it over a massive purple contusion that blossomed from the exact center of his forehead.
TRANSCRIPTION OF INTERVIEW WITH MS. KATELYNN MARGARET O’BRIAN
Q
: Let’s start on the day that Jakob Grant flew out to Washington.
KMO’B: I want an attorney.
Q
: Ms. O’Brian, you are not under arrest and you are not entitled to an attorney.
KMO’B: Then I don’t have to tell you anything.
Q
: Ms. O’Brian while that is technically true I would like to remind you that we can hold you indefinitely. And we will. It is in your best interests to cooperate with this investigation.
KMO’B: This is in my best interest? That’s a laugh.
[Tape recording muted at this point.]
[Tape recording resumed.]
Q
: I apologize for that. Are you ready to answer some questions, now?
KMO’B: Yeah.
Q
: Okay, let’s start with the day that Jakob flew out to Washington.
KMO’B: What do you want to know?
Q
: Why don’t you just describe the events starting from the airport on?
KMO’B: Well Bill and I dropped him off at the airport. Jake had his old leather bag and his ratty attaché case. He kissed me and he hugged Bill goodbye and then Bill and I drove home in my old VW bug.
Q
: Did you notice anything unusual about Jake or his demeanor?
KMO’B: Well, Jake seemed really sad; really depressed. I could tell he didn’t want to leave.
Q
: Did Jake mention anything about why Stanhope wanted to see him?
KMO’B: Jake and I don’t have any secrets. I saw the contents of the FedEx envelope. It was just a plane ticket to Washington. I don’t think that Jake knew anything more than I did.
Q
: Okay, then you drove home, right? What did you do when you got home?
KMO’B: I tried to keep the rest of the group focused on the project. We were making pretty solid progress. But I couldn’t get my mind off of Nick’s notebook. I had scanned a copy of it before we handed it over to the police detective so I printed it out and went over it page by page.
Q
: Did you learn anything?
KMO’B: Yeah, I found out that Nick had a crush on Zoë. So I guess I learned that if you love somebody you should tell them before it’s too late because you might not be around to tell them tomorrow.
Q
: Did you learn anything else?
KMO’B: Nick had a big problem with the 3D database. Do you know anything about data structures?
Q
: No.
KMO’B: Well a data structure is collection of things called elements. All the elements should be related like, I don’t know, let’s say you’re doing a data structure of cars and the elements could be color, make, model.
Q
: Okay.
KMO’B: So, let’s continue with our car data structure. You could also add elements for miles-per-gallon, number of passengers, miles on the odometer. I don’t suppose you know anything about ‘C’ data structures, do you?
Q
: No.
KMO’B: Well, in ‘C’ you have to set aside the exact amount of space in memory to hold the values that you want to put there. For example, some of the elements in our car structure that I described are numbers – like the number of passengers – it’s pretty safe to assume that the number of passengers is going to be between zero and 255. And it’s going to be an integer; that’s a whole number to you. We aren’t going to have a value like 3.5 passengers. Well, it takes exactly one byte to store an integer value between zero and 255.
Q
: What if you have a number like 256?
KMO’B: That’s a good question. It takes two bytes to store a value that big; but we’ve only set aside one byte. So, what happens is that the number slops into the next address in memory and writes over whatever data was supposed to be there. That means your data gets trashed. Let’s look at some of the other elements in the car data structure. You’ve got miles-per-gallon; that’s going to be some number like 25.5 or whatever. In ‘C’ we call that a floating decimal or floating point.
Q
: I’ve heard about floating point errors.
KMO’B: There are a lot of ways floating point errors can occur. It can be something as stupid as a misplaced decimal point.
Q
: I’ve heard that.
KMO’B: Anyway, the bottom line is this: data structures are made up of elements. And there is exactly ‘x’ number of bytes set aside for each element in the data structure. If you’re expecting a value that takes two bytes to store and all of a sudden you try to cram in a value that takes four bytes then something, somewhere, is going to get trashed.
Q
: So did you discover something like this in Nick’s notebook? Was this the problem that he was working on?
KMO’B: This was the problem that he was working on. Something was trashing the 3D database. But the solution wasn’t in Nick’s notes. Eventually I would discover that there were four pieces to this puzzle and I was still missing three of them. You see, when coders design data structures they often leave some unused space at the end of the structure. Technically this is called ‘for expansion’ it means that you expect you’re going to have to add some more elements to the data structure but you don’t know what yet; so you leave some extra bytes, you know, just in case.
Q
: Did Stanhope’s data structure have these extra bytes?
KMO’B: Yes there was an element in the data structure called ‘unused’ and it was two bytes long. It was the last element in the data structure; remember memory for a data structure is allocated in contiguous blocks in the order that the elements are declared so the extra two bytes appeared at the end of one structure and right before the beginning of the next structure. So if something weird happened in those two bytes it was going to trash the next structure.
Q
: And is that what happened? Did something weird – as you say – happen in those two bytes?
KMO’B: Yes and no.
Q
: Yes and no? What do you mean?
KMO’B: Well, it’s what we call an intermittent problem. Sometimes it would happen and then sometimes it wouldn’t.