Cartes de programmation du moteur d'analyse
introduction
Programmes pour le moteur d'analyse devaient être poinçonné sur carton cartes Jacquard. Babbage envisagé trois différents types de cartes, chacune avec son propre lecteur indépendant:
Cartes fonctionnement Ces cartes correspondent aux « codes de fonctionnement » dans le jeu d'instructions des ordinateurs modernes. Ils se composent des opérations qui commandent l'usine pour effectuer les différentes opérations arithmétiques: addition, soustraction, multiplications et des divisions, et les cartes qui combinatoires, conjointement avec l'avance Index des cartes ou sauvegarder la chaîne de cartes dans le lecteur; ceux-ci correspondent aux instructions saut / branche et de contrôle de la boucle des ordinateurs d'aujourd'hui. Nombre Ces cartes fournissent des constantes numériques poinçonnés sur eux à la banque, au besoin. La capacité de charger des cartes numériques permet plus constantes à utiliser dans un calcul que peut être contenu dans le magasin. Les cartes numériques sont généralement le résultat des calculs précédents et des coups de poing par la carte poinçonnage appareil. instructions de charge immédiate fournissent cette fonction dans les ordinateurs actuels. Cartes variables cartes variables dirigent le transfert des valeurs du magasin dans l'usine pour servir des arguments à une opération, et le transfert du résultat d'un calcul par le Moulin retour à un ou plusieurs endroits dans le magasin. Une carte variable peut, lors du transfert d'une valeur à l'usine, soit zéro la colonne dans le magasin ou le laisser comme avant.
Pour un lecteur moderne familier avec les architectures informatiques contemporains, cette séparation rigide entre les instructions, les constantes immédiates, et les références de stockage semble curieux. Babbage envisagé ces types de cartes comme distinctes pour d'excellentes raisons découlant de la mécanique du moteur. Chaque type de carte a un format très différent: pour une carte de fonctionnement, quatre trous suffisent probablement pour coder les opérations arithmétiques. Une carte Nombre, par comparaison, nécessite une colonne de 10 trous pour chacun des 50 chiffres du numéro qu'il contient, en plus d'une colonne pour indiquer le signe. Une carte variable se situe entre ces deux extrêmes; il doit préciser l'emplacement dans le magasin (colonne 0 à 999 dans la conception de Babbage), et la source ou de l'axe destination dans l'usine, et si, sur un transfert à l'usine, la colonne dans le magasin doit être remis à zéro.
Avec des machines séparées nécessaire pour chaque colonne de chaque carte, une simplification considérable a été réalisé en fournissant une procédure distincte, construite à cet effet, d'un lecteur pour chaque type de carte, même si certains composants supplémentaires seraient nécessaires pour coordonner le mouvement des flux séparés de cartes. Dans notre émulation du moteur d'analyse. nous avons choisi de faire abstraction des flux séparés de cartes en un seul flux qui représente l'ordre dans lequel les cartes de plusieurs cours d'eau dans la conception de Babbage auraient été présentés au moteur. Nous pensons que ce départ se justifie par les raisons suivantes:
- Le mécanisme par lequel les cartes d'un type donné commande la lecture de ceux d'autres types n'a jamais été écrit précisément dans l'une des publications concernant le moteur, mais est indispensable à son fonctionnement. Il serait donc nécessaire de faire ces spécifications sans contexte historique.
- Unifier les flux de cartes ajoute aucune capacité non présent dans la conception de trois flux de Babbage. En fait, il exclut quelques trucs obscurs on peut jouer avec les lecteurs séparés contrôlant le mouvement de chacun-autres, mais ne réduit en rien la capacité de calcul du moteur émulé.
- Les programmes écrits sous la forme de trois chaînes distinctes de cartes seraient extrêmement difficiles à préparer et à comprendre de l'inspection. En fait, les exemples de programmes préparés par Menabrea et Lovelace sont exprimés sous une forme dans laquelle les différents flux de cartes sont fusionnées en une représentation sous forme de tableau. Les détails de la façon dont les programmes de cette notation devaient être perforées sur des cartes ne sont jamais présentées en détail, et a été vraisemblablement considéré comme non pertinent à l'analyste la préparation d'un problème pour le moteur.
Nous permettons également une certaine souplesse supplémentaire dans le format des différentes cartes, ne nécessitant pas de numéros à droit justifié de 50 colonnes ou contenir des zéros à gauche, comme aurait certainement été le cas avec un moteur mécanique. Encore une fois, notre objectif est d'éliminer les obstacles inutiles à la compréhension du moteur sans compromettre la précision de l'émulation de ses capacités.
Cartes programme
Un programme pour le moteur d'analyse est composé d'une chaîne de cartes de différentes variétés et le contenu. Dans notre émulation du moteur, la chaîne est représentée par une série de lignes dans un fichier texte, une carte par ligne. Pour exécuter un calcul sur le moteur, la chaîne de la carte préparée par l'analyste est soumis à l'agent humain du moteur, qui examine les erreurs possibles et les demandes d'actions par le préposé (par exemple, pour inclure les cartes pour une norme précédemment préparée calcul tel que l'extraction de la racine carrée d'un nombre à un certain point dans la chaîne soumis).
nombre de cartes
Les cartes numériques sont les moyens par lesquels les constantes sont introduites dans le calcul. Chaque carte de numéro contient la lettre « N » comme premier caractère, suivi du numéro de la colonne dans la mémoire (0 à 999) dans lequel doit être placé la constante, suivie par la valeur 50 chiffres de la constante. Par exemple, la colonne 1 zéros suivants dans le magasin, place le numéro 10 000 dans la colonne 275, et définit la colonne 302 à -1321.
Une réalisation mécanique du moteur d'analyse aurait certainement besoin des numéros de poinçonnage en colonnes fixes avec des zéros et des signes explicites comme ci-dessus. Pour simplifier la préparation et des programmes de lecture, notre émulation vous permet de passer de grands zéros et placez le numéro de colonne de stockage et de la valeur dans toutes les colonnes, et d'omettre des signes pour les valeurs positives. L'exemple ci-dessus peut donc être simplifiée:
Les principaux zéros et l'alignement dans les colonnes omis peuvent être considérés comme étant fait dans le processus de préparation des cartes pour un calcul donné.
Cartes d'exploitation
Les différentes cartes d'opération sélectionner l'opération arithmétique l'usine est d'effectuer sur des arguments par la suite transférés. Les cartes de fonctionnement représentent donc les quatre opérations arithmétiques, chacun consistant en le signe de cette opération comme le premier caractère de la carte; le reste de la carte est ignorée. Les quatre types de cartes de fonctionnement sont donc:
Une fois que l'usine a été configuré pour exécuter une opération arithmétique donnée, il continuera à faire cette opération sur chaque paire d'arguments ont transférés; une autre carte opération est uniquement nécessaire pour sélectionner une autre opération.
Dans la discussion sur les diverses opérations de l'usine, il est nécessaire de rappeler que l'usine a deux 50 chiffres Ingress axes auxquels arguments sont transférées, avec le premier axe Ingress ayant un 50 chiffre Primed Axe auxiliaire qui reçoit les 50 chiffres les plus significatifs quand un nombre 100 chiffres est divisé par un nombre pouvant aller jusqu'à 50 chiffres. Les résultats d'une opération arithmétique apparaissent sur 50 chiffres Egress axe de l'usine. qui est également accompagnée d'un axe Primed 50 chiffres qui, dans le cas de la division, reçoit le quotient et le reste apparaît sur l'axe principal Egress. De plus, l'usine a un levier de Run-up qui est activé lorsque les conditions exceptionnelles surviennent au cours d'une opération arithmétique.
+ Ajouter. Les valeurs dans les deux axes Ingress sont ajoutés (en ignorant le contenu de la couche d'apprêt Ingress Axis), et la somme est placé sur la sortie de l'axe. Si le résultat de l'addition diffère de signe de celle du premier argument, ou d'un report de sortie se produit pendant l'addition (résultant d'un débordement de la capacité de 50 chiffres de l'usine), le levier d'accélération est réglée. - Soustraire. La valeur dans le deuxième axe Ingress est soustrait de celui du premier (en ignorant le contenu de l'axe Ingress Primed), et la différence est placé sur la sortie de l'axe. Si le résultat de la soustraction en signe diffère de celle du premier argument, ou une retenue se produit dans (résultant d'un débordement de la capacité de 50 chiffres de l'usine), le levier d'accélération est réglée. × ou * Multiplier. Les valeurs dans les deux axes sont multipliés Ingress (en ignorant le contenu de l'axe Ingress Primed), et les chiffres les moins significatifs 50 du produit sont placés sur l'axe de sortie, avec les chiffres les plus significatifs 50 apparaissant sur la couche d'apprêt Egress Axis. Le levier d'accélération est jamais mis en raison d'une multiplication. ÷ ou / Diviser. La valeur dans le premier axe Ingress (les moins significatifs 50 chiffres) et l'axe Primed Ingress (poids fort 50 chiffres) est divisée par la valeur dans le second Ingress Axis. Le quotient est placé sur la couche d'apprêt Egress axe et le reste à la sortie de l'axe. Si le quotient est supérieur à 50 chiffres ou le diviseur est égal à zéro, le levier d'accélération est réglé.
Cartes variables
Les cartes variables dirigent le transfert de colonnes dans le magasin à l'usine de participer à une opération arithmétique, et le transfert des résultats de l'usine au magasin. Chaque carte variable a une lettre que son premier caractère qui identifie sa fonction:
L Transfert de magasin à Mill Ingress Axis, laissant intacte la colonne de magasin. Z Transfert de magasin à Mill Ingress Axis, mise à zéro colonne de magasin. S Transfert de Mill Egress Axis à la colonne Store.
La séquence suivante du numéro, d'utilisation et cartes variables place le numéro 10 000 dans la colonne 1 du magasin et 28 dans la colonne 2, définit l'usine pour effectuer la division, les transferts du dividende, 10.000, et le diviseur, 28, puis les transferts le quotient de la Primed Egress axe de la colonne 3 dans le magasin et le reste de la sortie d'axe à la colonne 4.
Cet exemple, et beaucoup de ceux qui suivent, peut être exécuté dans l'émulateur Web en cliquant sur l'icône de vitesse à droite de la page. Chaque exemple qui porte cette icône peut être exécuté en cliquant dessus.
Lorsque le moteur termine le traitement de ces cartes, la colonne 3 dans le magasin contiendra le quotient, 357, et la colonne 4 le reste, 4.
Comme avec le numéro de cartes, notre émulation du moteur d'analyse vous permet de passer des zéros à gauche qui aurait été requis par la machine. L'exemple ci-dessus peut donc être réécrite comme plus lisible, si moins authentique:
Tous les documents décrivant les modèles de Babbage envisagé le renforcement des dividendes et des produits démissionner dans le cadre des opérations de division et de multiplication, mais jamais décrit avec précision comment cela devait être précisé par les cartes de contrôle du moteur. Notre émulation fournit à monter et descendre avec des cartes spéciales, incluses dans le flux de carte comme une multiplication ou une division est effectuée. Le monter et descendre les cartes sont:
Cela semble assez intimidant à première vue, mais un exemple concret devrait préciser comment monter et descendre sont utilisés dans la pratique. Supposons que nous voulons calculer
(4000 x 2,5) ÷ 28
Cartes combinatoires: Sauvegarde et progresser
La carte de moteur Reader n'est pas contraint de traiter simplement les cartes dans une chaîne un après l'autre, du début à la fin. Il peut, en outre, réalisé par les cartes mêmes qu'il lit et conseillé par le si le levier d'accélération de Mill est activé, soit faire avancer la chaîne de la carte vers l'avant, sauter les cartes intermédiaires, ou vers l'arrière, ce qui provoque des cartes précédemment lues à traiter encore une fois. Ceci peut être accompli par ce qui suit, la séquence générale et plus compacte de cartes, en prenant la factorielle de 6 comme ci-dessus, mais utilisable avec un nombre quelconque fourni à la colonne 0 est factoriel dont moins de 50 chiffres.
La dernière carte dans cette séquence est où la magie se produit; c'est notre première rencontre avec une carte combinatoire. Nous allons le disséquer en détail. Le premier caractère « C » identifie comme une carte combinatoire. Le second caractère est soit:
F cartes Advance (sauter vers l'avant) dans le lecteur. B Retour (saut en arrière et répéter) cartes dans le lecteur.
Le troisième caractère indique si l'avancement ou le soutien est toujours effectué (sans conditions), ou si elle dépend du levier d'accélération de Mill.
+ Toujours avancer ( « F ») ou à l'arrière ( « B ») cartes. cartes à l'avance ( « F ») ou à l'arrière ( « B ») que si le levier d'accélération de l'usine est réglé.
Le numéro de départ dans la colonne 4 indique combien de cartes doivent être avancées passées ou sauvegardés devant le lecteur. Pour comprendre ce nombre, il est important de garder à l'esprit que, au moment de la chaîne de la carte est avancée ou sauvegardé, la carte elle-même combinatoires a déjà été lu. et le lecteur de carte avancé à la carte suivante dans la chaîne. Par conséquent, le point de départ pour compter le nombre de cartes à dos ou l'avance est la carte après la carte combinatoires, pas la carte elle-même.
Ainsi, l'effet de la carte est combinatoires pour que les étapes de multiplication et de soustraction qui le précèdent à répéter tant que la valeur de la colonne 1, qui commence comme le nombre dont nous souhaitons factoriel, est supérieur à un. Cela peut être vu ensuite, pour obtenir le factoriel d'un nombre quelconque, nous commençons avec dans la colonne 0 (tant que son factoriel ne dépasse pas la capacité de 50 chiffres de l'usine et magasin).
Nous commençons par le chargement de la constante 0 dans la colonne 1 du magasin, puis ajoutez zéro à la quantité inconnue dans la colonne 0. Addition définit le levier d'accélération si la somme des deux quantités diffère en signe du premier argument; puisque nous ajoutons l'inconnu à zéro, le levier d'accélération sera réglé que lorsque le nombre dans la colonne 0 est négatif. Comme dans l'exemple factoriel précédemment, nous nous intéressons uniquement si l'ajout réglez le levier d'accélération, pas la somme, donc nous ne pas pris la peine de transférer la somme à la banque.
La carte conditionnelle combinatoires « CF? 1 » provoque la carte ci-dessous, la carte combinatoires inconditionnelle « CF + 4 » à sauter si le levier d'accélération est réglé. Skipping cette carte provoque la quantité dans la colonne 0 à soustraire de zéro, inversant son signe, et en retournant la valeur absolue à la colonne 0. Si le levier d'accélération est pas défini, le « CF + 4 » ne sera pas ignorée et, lors d'un traitement, avancera la chaîne de la carte après la soustraction, laissant la valeur positive dans la colonne 0 intacte. Ainsi, cette séquence de cartes inverse le signe du nombre dans la colonne 0 seulement si elle est négative pour commencer, obtenant ainsi la valeur absolue.
Cartes d'action
Une variété de cartes d'action effectuer des opérations arithmétiques non liées au calcul. Les cartes d'action sont les suivants:
L'exemple suivant, ce qui pourrait être utilisé au début d'un jeu de cartes utilisées pour extraire la racine carrée d'un nombre dans la colonne 0 du magasin, montre comment les cartes d'action sont utilisés. Si, en raison d'une erreur de la part de l'analyste dans la formulation d'un calcul pour le moteur, ou résultant de la préparation défectueuse des cartes, on tente d'extraire la racine carrée d'une quantité négative, il est préférable d'arrêter le calcul à ce point et alerter le préposé du problème que de poursuivre un calcul dont le résultat se révélera inévitablement erronée. Les cartes ci-dessous utilisent la même technique nous comptions précédemment pour calculer la valeur absolue, mais ici, si nous trouvons la valeur dans la colonne 0 à être négatif, nous imprimons le numéro incriminé sur l'imprimante, sonner la cloche pour avertir le préposé, et arrêter le moteur . Lors de l'examen du lecteur de carte, l'annotation manuscrite sur la carte qui a interrompu le moteur informe le préposé de la nature du problème. Si l'argument de l'extraction de racine carrée est non négatif, la séquence signalisation d'erreur est ignorée et continue le calcul.
Courbe Dessin Cartes
Le dessin de la courbe appareil est commandé par les cartes suivantes.
DX résultat de transfert de la dernière opération arithmétique de l'usine à la courbe de dessin Appareil coordonnée X. DY résultat de transfert de la dernière opération arithmétique de l'usine à la courbe de dessin Appareil coordonnée Y. D- Raise stylo. La prochaine « D + » carte va commencer un nouveau segment de la courbe. D + stylo inférieur et dessiner à courant X et Y des coordonnées.
La séquence suivante des cartes trace la fonction:
pour le domaine -1 ≤ x ≤ 1.
Cédant le terrain: