El fondo
Entonces, todos conocemos la prueba clásica que dice así:
a = b
a² = ab
a² - b² = ab - b²
(ab) (a + b) = b (ab)
(a + b) = b
b + b = b
2b = b
2 = 1 (¡Ja, ja!)
De Por supuesto, el error es que no se puede dividir por 0. Como a = b, a - b = 0, entonces hubo una división oculta por 0.
El reto
Tienes que replicar esta prueba. Primero, declare dos enteros a y b (no importa cómo los llame) que sean iguales. Luego declare que aMod y bMod son versiones modificables de a y b e inicialmente iguales a a y b, respectivamente. Debes multiplicarlos por a, luego restar b * b de ambos. Luego debe dividir por a - b y luego dividirlos por b (o a) para obtener. Luego, imprima aMod y bMod con un signo igual entre ellos.
El descuidado
Por supuesto, dado que declaró a y b como iguales, a - b = 0, y dividir por 0 produce un error. Entonces debes fingir creativamente. Además, debido a que está intentando replicar la prueba, el resultado en todas las operaciones en aMod y bMod no debe ser igual cuando se imprime. No tienen que ser exactamente iguales a 2 y 1, solo dos números que no son iguales.
Aquí hay un ejemplo:
#include <iostream>
#define subtract(a, b) a - b
using namespace std;
int main()
{
int a = 4, b = 4;
int a_2 = a, b_2 = b;
a_2 *= a;
b_2 *= b;
a_2 -= b * b;
b_2 -= b * b;
a_2 = a_2 / subtract(a, b);
b_2 = b_2 / subtract(-b, -a); // a - b == (-b) - (-a)
a_2 /= a;
b_2 /= a;
cout << a_2 << " = " << b_2 << " because I did the same operations on both of them.";
return 0;
}
Quizás no sea el mejor, pero ilustra el punto.
Bonus sin ayuda
En lugar de imprimir el signo igual, puede imprimir solo las dos variables (aMod y bMod), y luego tener un código que parece comparar las dos variables para la igualdad, pero en realidad radica en que son iguales (e imprime alguna forma de true
).
Recuerde, este es un concurso de popularidad, por lo que gana el mayor número de votos a favor.
Además, una nueva versión de las matemáticas llamada Mathematics 2.0 ha hecho uso de lagunas estándar que invalidan automáticamente una prueba.
fuente
Respuestas:
JavaScript
Salida:
Tenga en cuenta que 0/0 = NaN
Insinuación
fuente
Python 2
Estoy bastante seguro de que es obvio ya que todos conocen Python, pero aquí está mi intento:
Genera
True
.Insinuación:
fuente
Rubí
ideona
Insinuación:
Explicación:
fuente
GolfScript
Advertencia: este programa está engañando un poco, ya que no imprime aMod y bMod
Pruébalo aquí !
Entonces, ¿qué está pasando?
fuente
Prólogo
La salida cuando
areEqual(4,4)
se llama (o cualquier otro par de números realmente):¿Por qué?
fuente
JavaScript
Salida:
http://jsbin.com/furino/2/edit?js,output JsBin no parece poder ejecutar este código. Utilice la consola del navegador en su lugar.
¿Por qué?
Otro JavaScript: no sigue exactamente las reglas, solo genera si las variables son iguales o no.
¿Por qué?
fuente
NaN
no es igual a lasNaN
especificaciones de flotación IEEE. De hecho, una forma rápida de probar si tiene unNaN
C es compararlo consigo mismo. Esto se aplica a todos los idiomas, no solo a JS.Fantom
Salida:
¿Por qué?
fuente
a
igual alb
final.C
La falacia de la prueba clásica requiere un malentendido clásico de la sintaxis C. Lamentablemente, he conocido a algunos desarrolladores "de alto nivel" que están convencidos de que C está roto debido a resultados similares a este código. Si sabe cómo funciona C, se vuelve bastante obvio, pero si vio el código y asumió que era un lenguaje diferente, podría no serlo.
Por supuesto, no funciona tan bien cuando se escribe de forma más idiomática con
#include <stdio.h>
y se arroja delante de las declaraciones.fuente