Die folgende Story ist zwar bereits ein wenig her, aber immer noch interessant. Nach dem Wirbelsturm welcher New Orleans versenkte, stiegen die Benzinpreise offenbar ziemlich hoch. Da ich kein Auto fahre bin ich davon nicht persönlich betroffen. Deshalb habe ich keine Ahnung, wie teuer Benzin normalerweise ist und habe darum noch das “offenbar” eingefügt. In dem Zusammenhang habe ich eine auf den ersten Blick witzige Story gelesen: einige Tankstellen konnten den Preis nicht auf die über drei Dollars pro Fass hochschrauben. Ihre Zapfsäulen waren zu alt dafür.

About 200 gas sellers in rural Vermont own pumps too old to compute the higher prices, state authorities said on Friday, causing some to shut their pumps when prices spiked above $3 after the devastation of Hurricane Katrina.

"I knew my pump was old but I didn't expect prices to rise this fast," said Bill MacDonald, owner of central Vermont's Waits River General Store, whose 25-year-old pumps can't display any price above $2.99 a gallon.

Daraus können wir als Software-Entwickler selbstverständlich etwas lernen: möglichst wenig Limitierungen für Werte die nicht fix limitiert sind. Also so etwas wie Preise, Zeiten, Dateigrössen, Texteingaben, etc. Nun fordern aber die meisten Programmiersprache vom Programmierer bei der Deklaration einer Variable eine Entscheidung für eine Datengrösse: int, long, double und so weiter lassen grüssen. Doch lassen sich durch ein wenig (oder viel - je nach Umgebung) Abstraktion und Fleiss diese Variablen durchaus auch endlos wachsen - jedenfalls so lange wie der RAM mitmacht.

Ein Beispiel dafür ist die Programmiersprache Ruby. Diese konvertiert automatisch zwischen den beiden Datentypen Fixnum und Bignum. Ich zitiere aus dem Ruby "Pickaxe" Buch:

Ruby supports integers and floating point numbers. Integers can be any length (up to a maximum determined by the amount of free memory on your system). Integers within a certain range (normally -230 to 230-1 or -262 to 262-1) are held internally in binary form, and are objects of class Fixnum. Integers outside this range are stored in objects of class Bignum (currently implemented as a variable-length set of short integers). This process is transparent, and Ruby automatically manages the conversion back and forth.

Zurück zu meinem Eingangsbeispiel. Bei mechanischen Komponenten ist die Sachlage natürlich anders. Zudem gibt es ja auch bei Software-Projekten oft eine Spezifikation à la, "der Preis wird nie höher als drei Dollar sein", an welche sich der Entwickler hält. Erstaunt hat mich so oder so, dass der Preis nicht auf die logischeren 9.99 Dollars limitiert ist.

Wahrscheinlich sind das also drei Rädchen für den Preis, eines mit den Ziffern Null, Eins und Zwei und die anderen beiden mit den Ziffern von Null bis Neun. Bei meiner Mutter zu Hause steht so eine alte Zapfsäule und ich werde mir die irgendwann nochmals genauer anschauen.