¿Por qué las computadoras usan base-2 en lugar de base-10? Las computadoras decimales alguna vez fueron muy comunes, entonces, ¿por qué ya no lo son?

Porque es conveniente desde un punto de vista eléctrico.
Históricamente ha habido computadoras de base 3 e incluso 4 . El ancestro del bus serie RS232 utilizado: -12V, 0V y 12V, seguido de ‘Z’, un bit suave que es una alta impedancia para una entrada (a menudo atribuida a señales desconocidas) [1]

Tenemos una computadora con un número infinito de bits . Se llaman computadoras analógicas. Su eficacia está limitada por el ruido: principalmente térmico, electromagnético y mecánico (vibración).

Sería posible crear un transistor con varios estados gracias a los avances en microelectrónica (en lugar de depender del voltaje para controlarlos) puede usar los diferentes cuantos de energía de los niveles de impurezas de los electrones en un intervalo de banda; esta es probablemente una forma de hacer un estado sólido computadoras cuánticas. Pero la fuente actual que necesita suministrar esto debe tener una precisión extrema, que es similar al uso de un misil de alta tecnología para matar una cucaracha: exagerar, y la cucaracha podría escapar.
Un diagrama de energía estándar en MOSFET. Los electrones necesitan saltar la barrera de SiO2 para alcanzar un estado de mayor energía (más cerca del núcleo). Con un espesor de puerta de 5 nm, una proporción pequeña pero significativa pasará directamente a través de la puerta debido a la dualidad de la onda de materia, lo que aumenta el consumo de energía estática. Si esto parece complicado para el ojo no especializado, intente imaginar si había 10 niveles más de energía allí.

La electrónica digital (a través de la clase de transistor llamada MOSFET y sus derivados) usa carga eléctrica para formar un canal. Activar o desactivar un canal era el método más eficiente energéticamente que sabíamos cómo crear una unidad binaria: el bit. Un canal significa que los electrones fluyen desde la fuente al drenaje (la corriente es inversa, el drenaje a la fuente).
Pero todo es una convención ; no solo está activado / desactivado como cabría esperar, sino que hay innumerables estados intermedios por varias razones. ¿Recuerdas cuando dije que los circuitos analógicos están limitados por el ruido? Bueno, toda esa conmutación crea una gran cantidad de ruido, y tener una computadora analógica de propósito general del tamaño de lo que haría una CPU Intel crearía tanto ruido que sería poco práctico. Sin embargo, debido a que usamos esta convención de encendido / apagado, podemos regenerar convenientemente la señal.

0-10V característico de un disparador Schmitt, la base de un regenerador. Todo por debajo de 8V se considera estado “0”.

Si agregamos más estados intermedios, (aumenta el bitness) , los métodos más simples para regenerar la señal fallan; la complejidad del circuito aumenta y el costo / beneficio se reduce, ¡ya que los regeneradores más complejos también crean ruido! Aparentemente, una computadora decimal que usa los antepasados ​​de los transistores (un tubo de vacío de electrones llamado pentodes ) todavía funciona en el Reino Unido [2] Gracias, Rupert.
No es terriblemente eficiente energéticamente, porque esos tubos requieren que sus filamentos se calienten para poder cambiar. Eso solo se puede lograr con un alto voltaje (50-150V). La fuente de alimentación costosa y relativamente peligrosa, junto con el uso ineficiente de la energía y el espacio, hicieron que estas computadoras fueran bastante horribles en los cálculos.

También es conveniente desde un punto de vista algorítmico : muchos sistemas naturales funcionan en operaciones simples / 2 y x2. Si haces varias si hago esto … o aquello? puede llegar a refinar un resultado tan bien como si tuviera un árbol con 10 ramas de decisión.
En la foto: un árbol binario

Las computadoras binarias también permiten a los diseñadores de circuitos abstraer en cantidades muy grandes. Determinar cómo funciona una unidad de 4 bits requiere lápiz y papel y 5-10 minutos de su tiempo. Un circuito de 32 bits con una funcionalidad similar no es solo 8 veces más grande; es 2 ^ 28x más grande, y no puedes imaginarlo en tu cabeza. A menudo es necesario comprender la funcionalidad del bloque pequeño antes de proceder a diseñar toda la arquitectura, incluso si el proceso está completamente automatizado (y en un delicioso giro de ironía, realizado por la granja de computadoras).

La lógica booleana es la opción de facto para las computadoras, porque es natural, comprensible, rápida y fácil.

[1] ¿Cuáles son los diferentes modos de transceptor en las tarjetas serie NI RS-485?
[2] La respuesta de Rupert Baines a ¿Por qué las computadoras usan base-2 en lugar de base-10?

Las computadoras digitales son inherentemente bestias binarias. Ya sea que los construya a partir de relés, tubos de vacío o transistores, los circuitos lógicos más simples para construir comprenden dos estados principales: Encendido y Apagado.

Había computadoras digitales ternarias: computadoras construidas alrededor de tres estados digitales. Teóricamente, estas máquinas proporcionaron una densidad de cálculo más óptima. Pero, la informática ternaria nunca despegó realmente. (El hecho de que las primeras computadoras ternarias exitosas estuvieran en la Unión Soviética puede haber sido un factor). Puede encontrar enlaces sobre computación ternaria en Wikipedia: http://en.wikipedia.org/wiki/Ter

Ignorando las computadoras ternarias, el resto de las computadoras digitales son todas binarias. Representan números como combinaciones de 0s y 1s.

¿Qué pasa con la computación decimal? Las primeras computadoras estaban asumiendo roles previamente ocupados por humanos y máquinas sumadoras decimales. Antes del advenimiento de las computadoras electrónicas, la aritmética financiera se realizaba en decimal. Cada vez que se necesitaba redondear un valor, se redondeaba a un límite decimal.

Entonces, las primeras computadoras binarias implementaron aritmética decimal para adaptarse a ese mundo. El decimal codificado en binario (BCD) es un formato que sobrevive hasta nuestros días. Codifica valores decimales 0 – 9 en grupos de 4 dígitos binarios. Las máquinas realizaron aritmética decimal en estos valores codificados en binario, redondeando los límites de los dígitos decimales como lo haría cualquiera que hiciera la aritmética a mano.

Esto en realidad nunca murió.

En la era moderna, el estándar de punto flotante IEEE 754-2008 define el punto flotante independiente de radix, con especial atención al punto flotante decimal. Y los procesadores IBM POWER, si no me equivoco, proporcionan soporte de hardware para coma flotante decimal. La cosecha actual de compiladores GCC también proporciona extensiones para aritmética decimal de coma flotante.

Las computadoras decimales nunca murieron. Viven en su banco local, haciendo cálculos de finca.

La comunidad científica, sin embargo, no tenía necesidad de redondeo decimal. Con una representación binaria nativa, puede representar una precisión mucho mayor en el mismo número de bits. Entonces, aquellos que realizan simulaciones de bombas nucleares, simulaciones climáticas, etc. impulsaron el desarrollo del cálculo de punto flotante binario nativo.

Básicamente, a menos que necesite realizar un redondeo en los límites de los dígitos decimales, no es necesario utilizar la aritmética decimal. Entonces, fuera de ciertos cálculos financieros, el resto del mundo aprovechó las representaciones binarias más eficientes.

Y es por eso que la aritmética de coma flotante decimal es menos común que la aritmética de coma flotante binaria. Ambos todavía existen y ambos están bastante extendidos; sin embargo, el punto flotante binario es un orden de magnitud más común que el decimal.

Los cálculos binarios (o base-2) son más fáciles de implementar, ya que las operaciones individuales (suma / multiplicación, etc.) son más simples de ejecutar. La única razón por la que encontramos que el sistema decimal es tan intuitivo, se debe al hecho de que nacimos con 10 dedos que hemos usado para contar: así es como nos enseñaron a contar y se convirtió en ‘intuición’.

Teóricamente, definitivamente es posible tener computadoras decimales. Entonces, ¿qué dificultades prácticas enfrentaríamos?

  • Quizás lo más importante de todo sería la naturaleza no lineal de los transistores internos: las células vivas de una computadora. Esta naturaleza no lineal sigue empeorando a medida que los transistores disminuyen de tamaño. Esto significa que debe tener mucho cuidado al discretizar el rango de voltaje en el que opera. En pocas palabras, si está operando en un rango de 0-10 V; no puede operar con un conjunto simple de rangos como 0-1V – 0; 1-2V – 1; 2-3V – 2 …………… .. 9-10V – 9. Probablemente necesitará algo en las líneas de 0-2.5 – 0; 2.5-4 – 1; …… ..; 9.75-10V – 9 (básicamente, discretice en rangos no lineales).
  • Ahora, digamos que superamos la dificultad anterior y permitimos hacer transistores que tienen una respuesta de salida lineal (hay circuitos bien documentados para esto) o hicimos el esfuerzo de discretizar de forma no lineal. Aquí está el siguiente problema: los rangos de voltaje se han reducido para mantener el requerimiento de energía en niveles óptimos. Esto se debe en parte a la reducción de los tamaños (que se muestra en el gráfico). Un transistor más pequeño simplemente se freiría si aplica un voltaje mayor. Entonces su rango de 0-10V se convirtió en 0-1V. Y supongamos que tiene niveles de voltaje discretizados de forma no lineal. Deberá volver a realizar el proceso nuevamente, ya que cada generación más pequeña de transistores tendrá variaciones sutiles.

  • Ahora, supongamos que superó el último problema mediante la discretización no lineal o la fabricación de dispositivos lineales. El factor más irritante: el ruido comienza a pasar factura . Para evitar derretir (o freír) nuestros transistores, terminamos reduciendo el voltaje ¿verdad? Resulta que redujimos nuestro margen de seguridad contra el ruido en el proceso. Este problema es aún más grave si ha utilizado la discretización no lineal.

La generación anterior de arquitectos de computadoras tuvo la previsión de ver estos problemas con anticipación y terminó por decidir que no valía la pena tomar el camino de las computadoras decimales. Quizás la gente intentó construir computadoras decimales, pero estoy bastante seguro de que fue abandonado por el esquema binario mucho más ventajoso. Como dice el viejo refrán, hay 10 tipos de personas en el mundo, ……….

Nota: se ha ocultado una gran cantidad de detalles importantes debajo de la alfombra para mantener la respuesta razonable.

Referencias
CPU DB: Grabando el historial del microprocesador

La verdadera pregunta es, ¿por qué alguna vez se construyeron computadoras para funcionar en la base 10? Las ventajas de trabajar en binario son abrumadoras. Las operaciones básicas son mucho más simples de implementar, y generalmente se implementaron de todos modos, incluso en aquellas computadoras que sí ofrecían operaciones de base 10.

La respuesta parece ser el cableado. Al tener 10 estados por dígito de registro, podrían reducir la cantidad de cables que tenían que tender para lograr los mismos valores. Las operaciones reales realizadas al final de ese cable eran más complicadas que una operación binaria, pero no había tantas. Y no tenían que tener aún más hardware u operaciones para realizar las conversiones hacia y desde la base 10, que es la forma que los usuarios de la computadora querían escribir y leer.

Pero las computadoras crecieron rápidamente hasta el punto en que pasar esos cables a mano simplemente ya no era una opción. El cambio a las placas de circuitos impresos, y luego a los circuitos integrados, significaba que el número de cables ya no era una restricción tan grande. Junto con el transistor, esto hizo que las computadoras fueran más pequeñas (o al menos más densas), lo que les permitió acortar los ciclos de CPU, y los ciclos de CPU más largos necesarios por las representaciones pulsadas de decimales ralentizaron las cosas.

Durante un tiempo permaneció porque el lenguaje de programación COBOL tenía representaciones decimales codificadas en binario (BCD) integradas, y fue más rápido optimizar los programas para las operaciones BCD. Pero a medida que la optimización del compilador se volvió más sofisticada, la ventaja disminuyó y luego se convirtió en un obstáculo.

Las computadoras decimales nunca fueron exactamente “comunes”. Existían solo para Big Iron. Fueron caros de construir y pocos fueron producidos. Para cuando la tecnología hizo que las computadoras fueran lo suficientemente baratas como para costar decenas de miles, en lugar de millones, las computadoras decimales habían desaparecido. En el mejor de los casos, continuaron simulando las operaciones decimales con instrucciones en microcódigo, pero incluso esas operaciones desaparecieron cuando el precio de las computadoras cayó a miles.

Se puede pensar en una computadora como una pila de capas de abstracción de arriba a abajo, y solo la capa más inferior es el hardware real. Dado que el hardware es la única capa física, al mantenerlo lo más simple posible, puede mantenerse lo más barato posible. Además, al mantener la física lo más simple posible, los científicos e ingenieros pueden reducir los procesadores de manera más eficiente, lo que contribuye al aumento constante de la potencia de procesamiento que hemos disfrutado durante medio siglo, como se predijo con la Ley de Moore. Resulta que la simplicidad, como propiedad física, tiene algunos rasgos maravillosos.

En última instancia, la mayor parte de una computadora se implementa a través de abstracciones, por lo que no importa qué lenguaje use el procesador o en qué física dependemos. Por lo tanto, somos libres de elegir los métodos más rentables y eficientes disponibles para el hardware. Todo es cuestión de conveniencia.

Es posible que una computadora no esté cableada en decimales, pero puede pensar en cualquier base que desee, al igual que nosotros. Los detalles de la inteligencia no son físicos.

Las computadoras usan la base 2 porque así es como interactúan con los datos. Las computadoras solo tienen la capacidad de escribir o almacenar un valor positivo o negativo o verdadero / falso. Lo hace con almacenamiento / pulsos magnéticos / eléctricos muy pequeños que permiten que la computadora procese información de manera muy rápida y precisa.

Usamos la base 10 porque tiene sentido para nosotros. Hay una gran cantidad de lenguajes de programación que van desde el más cercano al binario (lenguaje ensamblador) hasta el más cercano al lenguaje humano (lenguajes de nivel superior). Esto permite un equilibrio entre potencia y usabilidad. La mayoría de la programación se realiza en el medio. Sin embargo, el objetivo final de hacer que las computadoras entiendan el lenguaje humano (habla) se convierta en realidad. Curiosamente, el discurso humano probablemente se pasa traducido a través de al menos un puñado de lenguajes de computadora, cada vez más cerca de 1s y 0s.

Espero que esto ayude.

Porque todo el hardware electrónico utilizado en el hardware de la computadora de hoy en día, desde los interruptores hasta las chanclas, los tubos de vacío y los transistores simples hasta los transistores Tri Gate de última generación, tienen solo 2 estados: encendido y apagado. Por lo tanto, tiene sentido basar toda la lógica aritmética en la base 2. Incluso en lugares donde usamos valores hexadecimales (direccionamiento de memoria) o valores decimales, finalmente se convierten en binarios a nivel de hardware. Off corresponde a 0, que indica tierra o 0 voltios. On corresponde a 1, que indica + Vcc Voltios

Es posible construir una computadora que use más estados. Por ejemplo, los dispositivos ternarios tienen 3 estados que corresponden a + Vcc, 0 y -Vcc.

Esto podría responderse en varios niveles diferentes. Primero, está el nivel de hardware con transistores que conforma puertas lógicas. Excepto por algún experimento ocasional ocasional [1], esto siempre es de naturaleza binaria y se basa en dos niveles de voltaje diferentes [2], como se menciona en otras respuestas.
En un nivel ligeramente superior, tratamos con los módulos que implementan el almacenamiento y las manipulaciones aritméticas en números enteros. Aquí hay algunas posibilidades adicionales.

  • Uno puede convertir el número entero en su representación binaria. Esta es la solución más eficiente en cuanto al espacio, y definitivamente la más común. Por ejemplo, [matemáticas] 36000_ {10} = 1000 1100 1010 0000_2 [/ matemáticas]
  • Considere cada dígito decimal en el número de forma aislada y conviértalo a un número binario de 4 bits (“decimal convertido en binario” o BCD). Esto es menos eficiente, porque no codificamos tantos números con un cierto número de bits como podríamos haber hecho. Por ejemplo, el número anterior que elegí porque era un buen número redondo que requiere 16 bits para almacenar en su totalidad en binario, requiere en BCD no menos de 20 bits: [matemática] 36000_ {10} = 0011 0101 0000 0000 0000_ {BCD} [/ matemáticas].

    Por otro lado, mientras que el binario no puede almacenar exactamente un número como 8.2 (se requiere un redondeo: es aproximadamente [matemática] 1000.00110011 … _2 [/ matemática], BCD puede almacenarla exactamente [matemática] 1000.0010 [/ matemática],
    Me han dicho (así que tómelo por lo que vale) que algunas aplicaciones en finanzas e impuestos consideran que esta es una propiedad muy valiosa.

  • Considere grupos de tres dígitos decimales y convierta cada grupo en un número binario de 10 bits. Eso traduciría el número de ejemplo a 0000100100 0000000000. Esto es ligeramente mejor que BCD, ya que puede almacenar números ligeramente más grandes con el mismo número de bits, pero tiene el mismo beneficio de la representación exacta de números decimales que BCD.

Ahora la pregunta es: ¿Qué tan común es que esto se haga hoy en hardware o siempre se haga en software? Y eso, realmente no lo sé (todavía).

[1] http://en.wikipedia.org/wiki/Ter
[2] que, por cierto, ya no son 0 y 5V; los circuitos CMOS modernos usan 0 y 3.3V o incluso menos, especialmente dentro de procesadores donde el voltaje más bajo ayuda a reducir mucho el consumo de energía

Existe una compensación entre la complejidad del circuito y la eficiencia.

En diseños antiguos con estados discretos: (topes en un sistema mecánico; válvulas electrónicas (tubos) con múltiples ánodos (triodos, pentodos, y decodificaciones, entonces tenía sentido usar decimales.

Si el costo por unidad fuera mayor, entonces la densidad de decimal (¡o hexadecimal!) Podría favorecer eso.

Pero la simplicidad del binario y los “transistores son simplemente interruptores” gana.

Algunas de las otras respuestas están equivocadas:

  • BCD sigue siendo base 2 (decimal codificado en binario – “binario” le dice que es base 2)
  • De hecho, ha habido computadoras que usan Base 10: Babbage y WITCH son ejemplos (ver más abajo)
  • También ha habido algunos que usan Base 3 (+, 0, -)
  • En la electrobía moderna, todavía es común codificar señales en múltiples niveles: aunque el binario se usa en lógica, el flash puede usar Base 4 o Base 8 (almacenamiento de varios niveles), y las comunicaciones se basan en digital multiestado, no solo binario.

Pero en electrónica no es que “almacenamos bits como uno o cero”, es más inteligente que eso.

Podemos decir que “cero” es cualquier voltaje menor que X, y “uno” es cualquier voltaje mayor que X. Eso hace que el circuito sea mucho más fácil porque no debemos preocuparnos por la precisión analógica. Y podemos usar un comparador o un transistor de saturación para limpiar las cosas.

En un sistema decimal necesitaría mucha más precisión (voltajes 0 = 0 a X / 10, 1 = x / 10 a 2X / 10, etc.); eso requiere buenas referencias, tal vez compensación de temperatura y más circuito.

Entonces, para binario, los componentes pueden ser más simples, los circuitos más fáciles, y eso lo hace más barato.

Trinary (+, 0, -) sería casi tan simple y se ha utilizado.
Computadora ternaria

Hay un contraste / contraejemplo interesante con las comunicaciones digitales.

Históricamente, esto usaba binarios, pero ahora a menudo usa Base 64 o Base 256.

Piense en código Morse, líneas T1 tradicionales o módems de 2200bps. Binario encendido / apagado, alto / bajo.

Pero ahora queremos velocidades de datos más altas (más eficiencia), utilizamos señalización multiestatal, niveles multiestado. Pasamos de binario a 4 niveles a 16, 64 o incluso 256. En este caso, el “mapeador QAM” y el “rebanador” buscarán la señal no entre 0 y X / 10 sino entre 0 y X / 64, entre X / 64 y 2X / 65, etc.

El aumento de la complejidad se justifica por la eficiencia mejorada.

Pero en las computadoras esa eficiencia no es necesaria, por lo que gana la simplicidad de los binarios.

La BRUJA de computadora digital que funciona más antigua del mundo desde 1951 está operativa en el Reino Unido.

Utiliza lógica decimal (tubos de vacío dekade con diez estados).

Restaurando la computadora Witch << video de la BBC

Reconstruyendo la computadora en funcionamiento más antigua del mundo << Descripción técnica

Las computadoras siempre han hecho cálculos utilizando la base 2 o sistemas de numeración binarios. ¡Simplemente no lo sabíamos, o nos importaba! La computadora nos engañó al tomar nuestros valores, convertirlos a los suyos y luego volver a convertir el resultado a nuestros valores para que podamos entender ese resultado

Base 2 o binario usa dos estados, activado o desactivado. Las computadoras funcionan con electricidad que tiene dos estados, encendido o apagado. Así es como funcionan las computadoras, utilizando la presencia o la falta de voltajes eléctricos en los circuitos electrónicos (encendido o apagado), para representar números en base 2 o binarios.

Los ingenieros inventaron agregar circuitos para trabajar en binario, pero luego mostrarlos en valores de números decimales. Estamos acostumbrados a contar y ver valores en decimal, base 10, por lo tanto, se desarrolló un circuito electrónico para que podamos ver los resultados de los cálculos en decimal al convertir primero los números decimales en un valor binario equivalente para que la computadora calcule un resultado en binario, luego convierta el número binario interno de nuevo a decimal para que podamos ver el resultado en nuestro conocido sistema de numeración de base 10. Una suma de 2 +2 es igual a 4. (Se muestra en base 10 decimal). en binario 2 la base 10 se convierte en un valor de “10” base 2. Si agrega “10”, la base 2 a “10” base 2, entonces el resultado es “100” base 2. (¡pregunte a sus hijos!)

La circuitería convierte ese valor de “100” base 2 en el valor equivalente de 4 base 10 y se muestra en una pantalla de calculadora. Vemos 4 base 10, pero internamente las computadoras ven 100 base 2. ¡Todo depende de cómo lo veas!

Ahora aquí está la parte extraña! Una computadora solo puede sumar números. No puede restar, multiplicar o dividir.

La sustracción se logra invirtiendo el número, y luego usando el método de suma del complemento para llegar al resultado.

La multiplicación se usa sumando el multiplicando a sí mismo, el número de veces igual al multiplicador -1. 5 x 2 = 10, o 5 +5 = 10. 5 × 3 = 15, o 5 + 5 + 5 = 15.

¡Recuerde que una computadora puede realizar millones de adiciones en un segundo!

¿Confundido por los diferentes sistemas de numeración base? Primero aprendí binario, luego octal, base 8 en máquinas Honeywell y finalmente en procesadores IBM en hexadecimal, base 16.

El binario crea largas cadenas de números, pero calcula a la velocidad de la luz, por lo que el tamaño es irrelevante.

¡Consulte con sus hijos, ellos lo saben!

Al pedirle a mi nieta que agregue 7 a 5 y me diga la respuesta, ella respondió rápidamente: “Ajá, pregunta capciosa. ¿Qué sistema de numeración base estás usando, decimal?

Imaginemos que está desarrollando una computadora nueva desde cero. Dada la tecnología es capaz de proporcionarle cualquier material, hardware, transistores, etc., ¿cómo decide qué base utilizar?

ASUNCIÓN : Suponemos que 2n-base es 2 veces más costoso que el esquema de n-base. En otras palabras, el costo es proporcional a la base. Suena lógico

Entonces, su objetivo es encontrar los registros más baratos para algún entero máximo constante. Quieres eficiencia .

Matemáticas dice que necesitamos [techo de matemáticas] (\ log_b {(M + 1)}) [/ matemáticas] posiciones para mantener cualquier número entero de cero a M (b es la base aquí).
Para M = 1 millón yb = 10, es el techo (6.00000043429) -> 7 posiciones. Y el único número entero que usa las 7 posiciones es ‘1000000’ mismo. Solo uno de un millón , pero tiene su propia posición dedicada. No es muy efectivo, ¿sí?

Entonces, el costo de registro es [matemático] c = {k} \ log_b {(M + 1)} \ cdot {b} [/ matemático], donde k es una proporción constante. Necesitamos encontrar un valor de b que minimice el costo para algunos M. El mínimo local de esa función se encuentra donde [math] dc / db = 0 [/ math], [math] b = e [/ math].


¿Qué tan efectivo es 10 bases?
Si desea almacenar el valor de 0 a 151103 (fecha de hoy, M legítima completamente al azar), necesita 6 posiciones: la última utilizada solo por 100000 .. 151103. Ya pagó por la sexta posición, pero 84% (1 – 151103 / 10 ^ 6) de su capacidad nunca se utiliza. Tiene un lugar para almacenar, digamos, 987123, pero nunca quiso; es más grande que M. El 84% de lo pagado es inútil. Eso es para M = 151103. Pruebe cualquier valor, M = 100500 o M = 2 ^ 32-1, encontrará esa ‘fuga’. Es cero solo cuando M es como 99; 999 y así sucesivamente.

Aquí, notará el patrón en dos gráficos:

Básicamente, la pérdida es máxima cuando M está cerca y es un poco más grande que una potencia de 10. Y luego llega a cero en M = (10 ^ some_integer-1), solo para volver a ser enorme en la próxima M para repetir ese patrón nuevamente. En el segundo gráfico, verá que parte del primer gráfico está a la izquierda. Y el gráfico 2 estará allí en el lado izquierdo si trazamos x en un intervalo más amplio:

Hasta donde yo sé, eso tiene algo que ver con fractales.
Ahora, veamos el mismo último gráfico (hasta una potencia de 3) para base = 2:


O incluso más amplio:

Todos esos gráficos se ven más amigables en la versión con eje X a escala logarítmica:

Verá que la inutilidad de la posición máxima se logra en algunos puntos y que el máximo en sí mismo está creciendo y tiende a [matemáticas] 1-1 / base [/ matemáticas].

Entonces, comparando la efectividad de 2 bases y 10 bases … El área delimitada por el gráfico de pérdida para cualquier M es menor para 2 bases, y el recuento de picos es mayor. Eso significa que cualquier número entero en 2 bases usa más posiciones y utiliza las posiciones dadas de manera más efectiva. Los registros cuestan menos (tenga en cuenta el supuesto).

PD. Nunca estudié matemáticas en inglés, así que disculpe cualquier frase extraña.


Actualización 15-11-20 : me pidieron que moviera el texto del comentario al cuerpo de la respuesta, así que …

Gracias por tus comentarios, Joshim.
Aquí hay una muestra. Digamos que hay una compañía de 4 amigos en un condominio de 4 habitaciones, y necesita señalar a cada uno a la habitación correspondiente por la noche. Marca personas 0, 1, 2, 3. También tiene 4 habitaciones para marcar. ¿Qué indicadores debes usar?
1. BASE-10: Pones indicadores de 1 dígito de este tipo:
Necesitarás 4 de ellos para 4 puertas. Cada uno de estos indicadores consta de 7 segmentos. Cada indicador cuesta 1 centavo (por ejemplo). Entonces pagas 28 centavos por ellos (4 * 7).
2. BASE-2: coloca indicadores de 2 dígitos de este tipo:
4 de ellos para 4 puertas. Y enseñas a tus amigos que no son uno de “0, 1, 2, 3” ahora; pero uno de “off + off, off + on, on + off, on + on”. Estos indicadores usan 2 segmentos. Total de 8 centavos (4 * 2)

En el primer caso, los indicadores cuestan 3,5 veces más, y nunca muestran dígitos 4,5,6,7,8,9. Eso es lo que yo llamo “pérdida”. ¿Por qué pagar por lo que nunca usará para su tarea?

Claro, M = 4 se toma no al azar aquí, sino para demostrar la idea. Si M es una potencia de 2 (4,8,16, …), entonces la base 2 es súper efectiva. Si M es una potencia de 10 (100,1000), entonces 10 bases es súper efectiva.

Pero cuando están limitados por algunos M_MAX, ¿cuáles son más frecuentes: potencias de 2 o potencias de 10? Obviamente, poderes de 2.

Imagínese teniendo un presupuesto limitado de 1 dólar para construir un gran indicador. 100 centavos = 100 segmentos. ¿Debería obtener 14 de los indicadores de 7 segmentos? 14 * 7 = 98. Podrá mostrar valores de hasta 10 ^ 14-1 (catorce 9s seguidos). M = 1,00E + 14

¿O debería obtener 98 de esos simples indicadores de encendido y apagado? El número entero máximo visualizable será 2 ^ 98-1 (todos los segmentos individuales activados). Eso es 3,17E + 29, y es 3,17E + 15 veces más grande que 1,00E + 14 (!)

Si considera que una computadora es la forma en que el programador la ve, entonces debe saber que algunos lenguajes de programación (por ejemplo, Python) proporcionan un tipo de datos decimales que evitan que las fracciones de un dólar sean incorrectas y molesten a sus auditores con centavos faltantes. Por supuesto, no tendrá que investigar mucho para descubrir que hay bits y binarios en la implementación subyacente. Pero especialmente en un mundo donde la memoria es increíblemente económica, hay poco que ganar al agregar complejidad para eliminar algunos bits de las representaciones almacenadas de su número.

C no tiene un tipo de datos decimales incorporado, pero si observa a su alrededor, debería poder encontrar una biblioteca adecuada a la que recurrir. Cobol es antiguo, pero está orientado a los negocios, por lo que tiene números decimales para que no arruines los centavos en tus cálculos comerciales.

Conocí a un tipo que tenía una calculadora mecánica antigua en su oficina (Monroe, creo que era la marca) que solía verificar los resultados aritméticos de las computadoras electrónicas recién creadas. Ver esa vieja calculadora mecánica hacer una operación de división fue algo emocionante de ver y escuchar. Sorprendentemente, encontró errores en algunas computadoras antiguas (pero eran nuevas en ese momento). Gracias a Youtube, puedes escuchar y ver uno en funcionamiento:

Y luego estaba el mendigo que imprimió un montón de pegatinas de “Advertencia – Intel Inside” después de que aparecieron errores en la aritmética del chip Intel x86 no hace mucho tiempo. http://www.trnicely.net/pentbug/

Cada estado en un sistema digital, ya sea {0,1} o {0,1, … 9} debe almacenarse y detectarse como un estado distinto en un sistema físico y esto no es solo un problema de electrónica. Cualquier error en el almacenamiento o la detección del estado significa que el cálculo falla, por lo que debe ser altamente confiable para evitar errores de cuantificación . Las tasas de error de estos sistemas nunca son cero, pero deben hacerse aceptablemente pequeñas.


Considere los medios para el almacenamiento de datos: agujeros perforados en tarjetas (desde principios de 1800) o cintas de papel, para retransmisiones en ENIAC a la memoria central (estados magnetizados), cintas magnéticas, las superficies magnetizadas de un disco giratorio, al estado de carga de un EEPROM, FLASH o unidades SSD modernas. Se ha demostrado que es más rentable reducir el tamaño del dominio de almacenamiento para admitir solo dos estados y utilizar sistemas de detección más simples para leer el estado. Por ejemplo, podríamos crear fácilmente una tarjeta perforada con 10 tipos diferentes de agujeros, o una celda EEPROM con 10 estados de carga diferentes, pero para hacerlo de manera confiable esto requeriría una tarjeta más grande o celdas EEPROM y detectores más complejos. Como resultado, los componentes básicos de diseño de todas las computadoras electrónicas han sido de naturaleza binaria.


Las primeras computadoras y calculadoras electrónicas usaron componentes binarios (relés mecánicos y circuitos flip-flop de 2 estados), pero esos primeros diseños usaron 4 de estas celdas binarias (4 bits) para representar un solo dígito decimal (por ejemplo, codificación BCD o exceso). 3 codificación). Esto significaba que algunos estados no se usaban (2 ^ 4 = 16 estados posibles, pero solo 10 estados eran ‘válidos’). Este enfoque evitó el problema de convertir de binario a decimal por cálculo, pero significó que (6/16) el 37.5% del recurso de la computadora se pierde como estados inutilizables.

En las primeras computadoras como ENIAC con almacenamiento y capacidad computacional muy limitados, era simplemente más práctico hacer cálculos de raíces cuadradas y aproximaciones trigonométricas en forma decimal para anular el problema de traducir de entrada decimal a binario para el cálculo, y luego volver a la salida decimal. Estas computadoras simples, como las primeras calculadoras, carecían de la flexibilidad necesaria para realizar estas operaciones de forma automática.


Por lo tanto, existe una clara compensación de ingeniería.

En una computadora decimal hecha de componentes binarios solo podemos usar (10/16) el 63% de los posibles estados del sistema, y ​​perdemos el uso del 37.5% de los estados. Esto significa que estamos desperdiciando efectivamente más de un tercio de la capacidad informática para evitar las traducciones decimales / binarias.

En una computadora binaria moderna hecha de los mismos componentes binarios, podemos usar el 100% de los estados del sistema, pero debemos traducir toda la entrada y salida numérica entre decimal y binario, y eso cuesta algunos cálculos adicionales.

A medida que las computadoras se volvieron más poderosas y los cálculos se volvieron más sofisticados, el costo del 37.5% perdido de los estados se volvió mucho más valioso que el costo de la traducción decimal / binaria / decimal.

La realidad es que el voltaje es realmente todo cuando se trata de construir una computadora. Su capacidad de procesamiento está compuesta por millones de transistores y la forma más simple de un transistor tiene un potencial de voltaje con respecto a tierra (un valor de 1) o tiene un potencial de voltaje igual a tierra (considerado ‘conectado a tierra’ con un valor de 0). La presencia de voltaje en cualquiera de estos transistores se puede representar con 1 o 0, y también se puede representar como verdadero o falso, respectivamente.

El sistema binario se escala bien, ya que simplemente agregar más de estas representaciones 1 o 0 le dará un número más alto, similar a agregar otro dígito en un número de base 10.

No sé mucho sobre computadoras decimales, pero esa es la lógica que vería.

Es mucho más fácil elegir dos estados opuestos que otros. Abrir o cerrar, brillante u oscuro, encender o apagar, con o sin. Usamos 0 para un estado y 1 para el otro, obtenemos el sistema numérico de base 2. Ahora, si desea tener otras bases, debe encontrar el estado que coincida con los números. Por ejemplo, necesita un sistema de 10 bases, define 10 grados de brillo, como oscuro por completo, bastante oscuro, oscuro en su mayoría, un poco oscuro … subbrillante, totalmente brillante, o entre abrir y cerrar una puerta, usted dice, 10 grados abierto, 20 grados abierto y así sucesivamente. Para alguien que no tiene sentido de brillo o grado, puede malinterpretar sus 40 grados abiertos (correspondientes a 4 en su sentido) como 50 (correspondientes a 5 en el sistema), por lo que obtiene una idea equivocada de usted, estoy seguro eso no es algo que quieras encontrar al usar la computadora (le dices a tu personaje del juego que vaya del lado izquierdo pero termina en el lado derecho de tu computadora y recibes el juego como retroalimentación). Para las computadoras, la mayoría de las partes están basadas en un transistor de unión bipolar (BJT) o MOSFET, y la información transferida es en forma de corriente y voltaje, para decodificar correctamente la información de la sección anterior, cada transistor solicita un amperímetro y un voltímetro, ¿todavía crees que está disponible ya que los amperímetros y voltímetros están construidos por transistores, sin mencionar que los integran en un pequeño chip? Y también, cuando uno sufre la inestabilidad de la electricidad, el voltaje solo aumenta en todas partes, y se obtienen señales incorrectas en todas partes. Pero en binario, el voltaje tiene solo 2 estados marcados como alto y bajo voltaje, que de alguna manera se relacionan con los estados bloqueados y desbloqueados de los transistores. Con bajo voltaje de menos de 1.4 voltios y alto de más de 3.6 voltios, los transistores indican si deben ser bloqueados o no fácilmente. Por último, pero no menos importante, los números codificados por binario aumentan exponencialmente con el aumento de dígitos, no se necesitarán demasiados dígitos para codificar números grandes, como 1000000000 en binario representa 1024 en decimal.

Hay una división cultural que nos afecta hasta el día de hoy. Esa es la ingeniería frente al enfoque matemático de la informática. Todavía verá restos de esto, por ejemplo, MIT (Ingeniería) versus Carnegie-Mellon (Matemáticas).

Los ingenieros pensaron en la base 10, porque antes de las máquinas completas de Turing, la mayoría de los dispositivos de cálculo usaban contadores de décadas de un tipo u otro. Los matemáticos pensaron en la base 2, porque una vez que tienes un sistema completo de Turing, es trivial hacer una conversión hacia y desde la base 10 o cualquier base que elijas, y la base 2 es matemáticamente más simple.

El Integrador Numérico Electrónico y la Computadora (ENIAC) usaron contadores de décadas. Generalmente se reconoce como la primera máquina completa de Turing. Fue en gran medida una hazaña de ingeniería y requirió que las unidades se conectaran entre sí de diferentes maneras para un programa en particular.

Un par de años después, Alan Turing estaba trabajando en el Automatic Computing Engine (ACE), una computadora integrada de programas almacenados. Nunca fue construido, pero fue presupuestado por mucho menos que el ENIAC.

Turing solía burlarse de la propensión estadounidense a encontrar soluciones de ingeniería cuando un poco de inteligencia matemática sería suficiente.

ETA: A riesgo de repetirme en Quora, una vez un periódico intentó probar que la mejor base para una computadora es e (2.71828182844 ..). No compré el razonamiento, pero alguien intentó hacer una computadora de base 3. Resultó ser más problemas de lo que valía la pena.

El enfoque para la computación temprana estaba en la manipulación de números decimales. Paradigmáticamente, los ingenieros crearon algo que encajaría exactamente en esa tarea. Como la unidad básica de la cosa a manipular (un dígito decimal) tenía diez estados, la solución fue construir máquinas compuestas de algún tipo de bloque de construcción de 10 estados.

Computadora decimal
ENIAC
Contador de anillo

Después de que se inventó el transistor, un dispositivo inherentemente de 2 estados, los ingenieros informáticos explotaron la capacidad de 2 estados para construir computadoras mediante la implementación de tareas de procesamiento informático en hardware superior basado en transistores. (Consulte el siguiente enlace para obtener algunas ideas de por qué los transistores superarían a la técnica anterior: ENIAC). El procesamiento binario (2 estados) se volvería omnipresente en el nivel de procesamiento y todavía lo es en la actualidad.

Transistor

Decir “base-2” en lugar de “procesamiento binario” parece implicar que un sistema de numeración puede ser la razón por la cual el procesamiento binario es omnipresente. Un sistema de numeración es la razón por la cual las computadoras decimales se implementaron con dispositivos como contadores de anillo, pero los transistores cambiaron ese paradigma de pensamiento: el transistor es convincente y no puede ser otra cosa que un transistor, pero los ingenieros pueden cambiar su forma de pensar.

Bueno, ellos no.

Las primeras computadoras, como el motor de diferencia de Babbage y ENIAC usaban base-10. Probablemente porque fue más fácil de visualizar y no la gran sacudida de cambiar a la base 2.

Luego, todas las primeras máquinas de contabilidad comercial usaban base-10, podían leer dígitos decimales de las tarjetas, sumar y tachar dígitos decimales nuevamente.

En los primeros días hubo mucho debate sobre cuál es la mejor base para la informática. Para las aplicaciones comerciales, está leyendo muchos números decimales de tarjetas o cintas, haciendo un poco de aritmética y luego imprimiendo decimales. En esa situación, es mejor mantener las cosas decimales hasta el final. Por lo tanto, muchas de las primeras computadoras comerciales se quedaron con decimal o BCD. Incluso a través del sistema 360, las computadoras tenían instrucciones aritméticas decimales, y por una buena razón.

Pero si va a hacer muchos cálculos numéricos dentro de la computadora, el binario es más eficiente, por lo que el binario a menudo se implementaba además o en lugar de decimal. en cuyo caso es mejor que la computadora tenga instrucciones bastante rápidas de multiplicar y dividir para convertir a / desde decimal.

La razón básica es que el transistor electrónico es un interruptor controlado electrónicamente. Pensemos en un cambio normal. Se puede encender o se puede apagar. Lo haces a mano, o en otras palabras, mecánicamente. Un transistor electrónico (y su predecesor, el tubo de vacío) son interruptores electrónicos. Puede usar una señal electrónica para encenderlos y apagarlos.

Entonces, lógicamente un transistor tiene 2 entradas y una salida. Puede aplicar un voltaje en la entrada A y dejar la salida B conectada a tierra, y la corriente fluirá desde la salida. Ahora, si aplica voltaje en la entrada B, la corriente dejará de salir de la salida. Lógicamente, esto no es muy útil por sí mismo. Los primeros tubos de vacío (e incluso algunos transistores de fuerza industrial) permiten un voltaje más pequeño en la entrada B para controlar un voltaje más grande en la entrada A. Esto permitió que los interruptores electrónicos tempranos se usaran como dispositivos de seguridad. La entrada B estaba conectada al interruptor que estaba controlado por un humano. Esto mantuvo al humano lejos de altos voltajes.

Sin embargo, un grupo de matemáticos miró esto y dijo … hmm, podemos usar esto para hacer álgebra booleana. Básicamente, un transistor realiza una operación NAND. Y matemáticamente, una vez que puede hacer una operación NAND, puede hacer cualquier operación booleana alineando puertas NAND en diferentes configuraciones. Entonces, eran geniales … tenemos una máquina que puede hacer cualquier operación lógica. Luego, otro grupo de matemáticos dijo que podríamos representar cualquier número en base 2. Esto significa que puede alinear un grupo de transistores y hacer que representen cualquier número. Esto se llama un registro . Luego descubrieron que usando operaciones booleanas se podían hacer operaciones matemáticas. Esto significaba que al manipular registros podías calcular cualquier cosa. De ahí el nacimiento de la computadora.

Estoy acostado un poco más arriba. El álgebra booleana es anterior a las computadoras. Y las primeras computadoras no estaban todas basadas en puertas lógicas. La historia es un poco más desordenada que la anterior. Sin embargo, en algún momento, alguien descubrió que los transistores se pueden usar para hacer álgebra booleana. Esto es lo que lleva a las computadoras modernas, por eso las computadoras son binarias.

Había muchas ideas en el medio, por ejemplo BCD. Sin embargo, al final, representar todos los datos en binario hasta que el resultado tenga que mostrarse al humano es más eficiente que hacer cálculos en decimal.

En una computadora, es fácil representar la información digitalmente, utilizando la presencia o ausencia de un potencial eléctrico. El procesador de su computadora es una enorme variedad de transistores, literalmente miles de millones de ellos, que son básicamente interruptores electrónicos que se encienden o apagan. La memoria de su computadora almacena información utilizando la presencia o ausencia de una carga eléctrica. Es difícil y engorroso representar la información utilizando múltiples valores de corriente eléctrica (por ejemplo, 1 voltio para 1, 2 voltios para 2, 3 voltios para 3, y así sucesivamente). Tales computadoras analógicas fueron construidas, muy temprano en la historia, pero las computadoras digitales rápidamente las superaron en rendimiento.