Ver la versión completa : 399999999999999-399999999999998 = 0, y lo puede demostrar :).
Dullyboy
23/04/2010, 10:42
Lo encontré ayer totalmente de casualidad (tirando de stumple upon) y es tan fácil de demostrar como:
Hacerlo con la calculadora de Google (http://www.google.com/search?hl=en&q=399999999999999-399999999999998&aq=f&aqi=&aql=&oq=&gs_rfai=)
(Habro otro hijo porque básicamente quiero saber como funciona la calculadora de google para hacer mal esa cuenta y no hacer mal 299999999999999-299999999999998 o 400000000000 - 399999999999999)
***** quien se aburre tanto para probar esas cosas??? xDDDD
Matemáticas defectuosas fanclu ya!:lol:
GameMaster
23/04/2010, 11:28
Hombre, nunca has oido hablar en redondeos ? Esto es super normal en todos los sistemas informaticos, incluso en .Net, intenta hacer calculos con Double, conversiones de Double a string, hazl calculos con el idioma ES y despues los mismo con idioma EN, etc, etc, ya verás tus dolores de cabeza :)
Hombre, nunca has oido hablar en redondeos ? Esto es super normal en todos los sistemas informaticos, incluso en .Net, intenta hacer calculos con Double, conversiones de Double a string, hazl calculos con el idioma ES y despues los mismo con idioma EN, etc, etc, ya verás tus dolores de cabeza :)
Pero esos redondeos serian iguales para todos los numero, y el esta diciendo que con 299999999999999-299999999999998 o 400000000000 - 399999999999999 no falla, pero con 399999999999999-399999999999998 si. Eso no es logico, ni creo que sea comparable a los castings que estas mencionando.
Un saludo
bulbastre
23/04/2010, 13:06
Lo encontré ayer totalmente de casualidad (tirando de stumple upon) y es tan fácil de demostrar como:
Hacerlo con la calculadora de Google (http://www.google.com/search?hl=en&q=399999999999999-399999999999998&aq=f&aqi=&aql=&oq=&gs_rfai=)
(Habro otro hijo porque básicamente quiero saber como funciona la calculadora de google para hacer mal esa cuenta y no hacer mal 299999999999999-299999999999998 o 400000000000 - 399999999999999)
Peor que unas matemáticas incorrectas es una ortografía incorrecta.
A no ser que se refiera a Hasbro, que entonces se puede considerar typo.
Dullyboy
23/04/2010, 13:11
Hombre, nunca has oido hablar en redondeos ? Esto es super normal en todos los sistemas informaticos, incluso en .Net, intenta hacer calculos con Double, conversiones de Double a string, hazl calculos con el idioma ES y despues los mismo con idioma EN, etc, etc, ya verás tus dolores de cabeza :)
Si ya se que es redondeo, lo que quiero saber es exactamente como redondea para que falle de esa manera, porque en programas de cálculo profesionales hay que inventar mucho más para encontrar errores así.
Peor que unas matemáticas incorrectas es una ortografía incorrecta.
A no ser que se refiera a Hasbro, que entonces se puede considerar typo.
si te has fijado, pone habro otro hijo. Cuando os pongais a corregir la escritura de los demas, al menos aseguraros de que no forma parte de una coña.
Dullyboy
23/04/2010, 13:14
Peor que unas matemáticas incorrectas es una ortografía incorrecta.
A no ser que se refiera a Hasbro, que entonces se puede considerar typo.
Es por la hora, que estaba dormido :) (si no tampoco necesito destripar a un "hijo" para comentar esto :), y el título también está mal que quería poner puedo...), siempre se me cruzan los hacer con los hechar con los abrir o con cualquier cosa que se le parezca al conjugar.
(Eso sí, lo de decir que es peor escribir mal que hacer matemáticas mal no te lo paso :D).
http://www.gifbin.com/bin/250yu273swsw.gif
Nathrezim
23/04/2010, 13:30
Pero esos redondeos serian iguales para todos los numero, y el esta diciendo que con 299999999999999-299999999999998 o 400000000000 - 399999999999999 no falla, pero con 399999999999999-399999999999998 si. Eso no es logico, ni creo que sea comparable a los castings que estas mencionando.
Un saludo
Pues a mi tampoco me funciona 400000000000 - 399999999999999, será que mi calculadora está mal :D. http://www.google.com/search?hl=en&q=400000000000000-399999999999999&aq=f&aqi=&aql=&oq=&gs_rfai=
Tiene toda la pinta de ser por redondeos.
Es por la hora, que estaba dormido :) (si no tampoco necesito destripar a un "hijo" para comentar esto :), y el título también está mal que quería poner puedo...), siempre se me cruzan los hacer con los hechar con los abrir o con cualquier cosa que se le parezca al conjugar.
(Eso sí, lo de decir que es peor escribir mal que hacer matemáticas mal no te lo paso :D).
http://www.gifbin.com/bin/250yu273swsw.gif
"Fail!!!" + "hechar no existe" combo:lol:
Pues a mi tampoco me funciona 400000000000 - 399999999999999, será que mi calculadora está mal :D. http://www.google.com/search?hl=en&q=400000000000000-399999999999999&aq=f&aqi=&aql=&oq=&gs_rfai=
Tiene toda la pinta de ser por redondeos.
:
Lo de que no funcionaba lo ha dicho DullyBoy, no lo he comprobado (fallo mio, supongo). Lo que queda claro es que si tampoco funciona con el resto de numeros es fallo de redondeo, pero si puede hacer el calculo sin problema con el resto, tal y como dice DullyBoy, pues ya seria otro cantar
Con 14 digitos hace bien, en el momento en el que se pone el 15, ya casca. Fallo de redondeo :p
Hasta otra
Dullyboy
23/04/2010, 13:45
Vaya hombre, al probar con 400000000000000 me debí comer 3 ceros, pero que con 299999999999999-299999999999998 funciona bien eso fijo (que lo acabo de recomprobar :D).
Y ahora mirando a ver con:
399999999999999 - 399999999999997 = 2 (http://www.google.es/#hl=es&safe=off&q=399999999999999+-+399999999999997&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=54a1992f7d082408)
399999999999998 - 399999999999997 (http://www.google.es/#hl=es&safe=off&q=399999999999998+-+399999999999997&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=c0c3de1a62e986db) = 0
400000000000002 - 400000000000000 (http://www.google.es/#hl=es&safe=off&q=400000000000002+-+400000000000000&meta=&aq=&aqi=&aql=&oq=400000000000002+-+400000000000000&gs_rfai=&fp=c0c3de1a62e986db) = 2
WTF???
Y además
400000000000000 -100000 = 400000000000000 (http://www.google.es/#hl=es&safe=off&q=400000000000000+-100000&meta=&aq=&aqi=&aql=&oq=400000000000000+-100000&gs_rfai=&fp=c0c3de1a62e986db)
Y como sería de esperar:
4.0*10^14 + 1 = 4.0*10^14 (http://www.google.es/#hl=es&safe=off&q=4.0*10^14+%2B+1&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=54a1992f7d082408)
pero...
4.0*10^14 + 2 - 4.0*10^14 = 2 (http://www.google.es/#hl=es&safe=off&q=4.0*10^14+%2B+2+-+4.0*10^14+&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=d7e7c3b075b76730)
¿Se puede ver el código fuente de la calculadora en algún lado o en que se basa para hacer los redondeos?
(Para que no me vuelva a pasar lo de antes pondré los enlaces :D).
Parece que a partir de aquí empiezan las "rarezas":
333333333333335 - 333333333333334 = 0 (http://www.google.es/#hl=es&source=hp&q=333333333333334+-+333333333333333&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=217180e3c449c6c3)
333333333333334 - 333333333333333 = 1 (http://www.google.es/#hl=es&source=hp&q=333333333333334+-+333333333333333&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=217180e3c449c6c3)
pinchacantos
23/04/2010, 14:00
Subforo de matemáticas YA!!!
Nathrezim
23/04/2010, 14:14
Lo encontre!!!!!!uno!!!once!!!
...
333333333333333 - 333333333333332 = 1
333333333333334 - 333333333333333 = 1
333333333333335 - 333333333333334 = 0
333333333333336 - 333333333333335 = 0
...
<->
Demasiado tarde :lol:
Dullyboy
23/04/2010, 14:16
Yo antes :P
Además estoy jugando y...:
333333333333334.4 - 333333333333333 = 1.375 (http://www.google.es/#hl=es&safe=off&q=333333333333334.4+-+333333333333333&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=c0c3de1a62e986db)
333333333333334.5 - 333333333333333 = 1.5 (http://www.google.es/#hl=es&safe=off&q=333333333333334.5+-+333333333333333&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=c0c3de1a62e986db)
No se, pero creo que aquí el álgebra binaria tiene algo que decir, más que buscarle los tres pies al gato con números decimales :D:D:D
SplinterGU
24/04/2010, 02:57
Hombre, nunca has oido hablar en redondeos ? Esto es super normal en todos los sistemas informaticos, incluso en .Net, intenta hacer calculos con Double, conversiones de Double a string, hazl calculos con el idioma ES y despues los mismo con idioma EN, etc, etc, ya verás tus dolores de cabeza :)
game, obviamente esto va de broma...
Pero esos redondeos serian iguales para todos los numero, y el esta diciendo que con 299999999999999-299999999999998 o 400000000000 - 399999999999999 no falla, pero con 399999999999999-399999999999998 si. Eso no es logico, ni creo que sea comparable a los castings que estas mencionando.
Un saludo
no tiene que ver con los redondeos, tiene que ver con la precision de la codificacion de los numeros de coma flotante... sugiero ver documentos de IEEE y sus problemas de precision...
http://es.wikipedia.org/wiki/IEEE_punto_flotante
http://es.wikipedia.org/wiki/IEEE_coma_flotante
saludos.
Dullyboy
24/04/2010, 14:15
no tiene que ver con los redondeos, tiene que ver con la precision de la codificacion de los numeros de coma flotante... sugiero ver documentos de IEEE y sus problemas de precision...
http://es.wikipedia.org/wiki/IEEE_punto_flotante
http://es.wikipedia.org/wiki/IEEE_coma_flotante
saludos.
Muchas gracias por darnos un poco de luz en el problema :).
Aunque ahora me surgen nuevas dudas, ¿cómo es que casca en 333333333333334?
¿No debería ser en una potencia de 2 o potencia de 2 +- 1 donde empiecen los fallos?
Y lo más cercano es 2^48 = 2.81474977 × 10^14
Además, ¿cual es el procesador que hace los cálculos? ¿El mio o el servidor de Google?
hellcross
24/04/2010, 14:44
Como es que os aburris tanto? xD
Dullyboy
24/04/2010, 15:19
Estos no se que excusa tienen, pero yo es que soy matemático y además me pierde saber como funcionan las cosas :D.
akualung
24/04/2010, 15:51
Yo tengo una mejor: 0 != 0
Explicación: Chuck Norris lo quiere así.
Yo no creo que sea por redondeo, ya que no hay decimales que redondear...
499 999 999 999 999 - 499 999 999 999 996 = 3
499 999 999 999 999 - 499 999 999 999 997 = 2
499 999 999 999 999 - 499 999 999 999 998 = 0 <- FAIL
499 999 999 999 999 - 499 999 999 999 999 = 0
Yo no creo que sea por redondeo, ya que no hay decimales que redondear...
499 999 999 999 999 - 499 999 999 999 996 = 3
499 999 999 999 999 - 499 999 999 999 997 = 2
499 999 999 999 999 - 499 999 999 999 998 = 0 <- FAIL
499 999 999 999 999 - 499 999 999 999 999 = 0
Puede ser un fallo con los float, si usan esa variable para hacer el calculo, por ser un numero muy grande, en vez de un double, no?
no tiene que ver con los redondeos, tiene que ver con la precision de la codificacion de los numeros de coma flotante... sugiero ver documentos de IEEE y sus problemas de precision...
http://es.wikipedia.org/wiki/IEEE_punto_flotante
http://es.wikipedia.org/wiki/IEEE_coma_flotante
saludos.
Puede ser un fallo con los float, si usan esa variable para hacer el calculo, por ser un numero muy grande, en vez de un double, no?
A eso es a lo que se refiere SplitenGU, o eso creo.
SplinterGU
24/04/2010, 18:30
es un fallo aceptable de la representacion... ya sin entrar en detalles del algoritmo, si lo piensan rapidamente, ya del vamos la logica nos dice que al estar metiendo un numero mas grande que los que se pueden contar en 32bits (float) o 64bits (double)... entonces algo de perdida vamos a tener...
por otro lado, en muchos casos es error de conversion o representacion visual de los numeros, pero en otros es de los numeros en si...
los numeros con coma flotante son un problema interesante, por eso, en los grandes sistema que manejan dinero no se usan flotantes, se usan enteros de los que X digitos al final representan los decimales.
pero no se rompan el coco pensando, porque no hay vueltas...
No se, pero creo que aquí el álgebra binaria tiene algo que decir, más que buscarle los tres pies al gato con números decimales :D:D:D
A eso es a lo que se refiere SplitenGU, o eso creo.
Y varios mensajes más.
Drumpi Ninja vuelve a la carga, sigiloso y mortal :lol:
Da igual lo precisa que sea una máquina, por un parámetro delta muy pequeña que tenga, el espacio para representar un número es finito, ya sean 16, 32 o 64 bits.
Es por eso que existen diversos procesos matemáticos que hacen cálculos en base a aproximaciones y correcciones de desviaciones y...
Resumiendo: como dicen en mi facultad todos los matemáticos ante un problema complejo o imposible de responder: "preguntadle a vuestro profe de Métodos Numéricos" (en serio, ese tío debe ser Dios :D:D:D).
Por cierto, Dullyboy será matemático, pero yo soy teleco... especializado en sistemas electrónicos :lol: creo que conozco los ordenadores mejor que un informático (o al menos ese es mi trabajo :p)
Dullyboy
24/04/2010, 20:14
pero no se rompan el coco pensando, porque no hay vueltas...
Anda que no :), van a pasar unos cuantos días hasta que canse de jugar con esto.
Resumiendo: como dicen en mi facultad todos los matemáticos ante un problema complejo o imposible de responder: "preguntadle a vuestro profe de Métodos Numéricos" (en serio, ese tío debe ser Dios :D:D:D).
En vuestro ambito sí, porque es la única rama de matemáticas que obliga a saber de ordenadores, por las otras sale cada analfabeto tecnológico que llega a asustar... (si paso por la falcultad le pregunto al mio :D).
Por cierto, Dullyboy será matemático, pero yo soy teleco... especializado en sistemas electrónicos :lol: creo que conozco los ordenadores mejor que un informático (o al menos ese es mi trabajo :p)
Pues ahorrame tiempo :D que quiero saber como almacena el algoritmo los números a la hora de operar para que falle de este modo. Cuando puse que "básicamente quiero saber como funciona la calculadora de google para hacer mal esa cuenta" era literalmente :).
Por cierto, Dullyboy será matemático, pero yo soy teleco... especializado en sistemas electrónicos :lol: creo que conozco los ordenadores mejor que un informático (o al menos ese es mi trabajo :p)
En fin, no se si sentirme ofendido o que... que seas teleco y especializado en sistemas electronicos, no te capacita para conocer mejor la forma de programacion de un ordenador. Yo soy informatico, y trabajo con telecos y a la hora de comprender la programacion, menos 1 o 2, al resto se le nota la falta de conocimientos. Que sepas ver y comprender una placa y sus circuitos, no implica que sepas programar para ello, sin embargo yo no necesitos saber como esta hecha la placa, si no saber sus instrucciones.
Igual te estoy mal interpretando, pero trabajar con telecos que hacen la labor de un informatico,como por ejemplo programar y escucharles decir que la programacion es una mierda y creerse superiores a los informaticos me quema un huevo, cuando me demuestran cada dia lo contrario:loco:.
Un saludo
En vuestro ambito sí, porque es la única rama de matemáticas que obliga a saber de ordenadores, por las otras sale cada analfabeto tecnológico que llega a asustar... (si paso por la falcultad le pregunto al mio :D).
Qué raro, tenía entendido que a día de hoy todos los matemáticos tiraban de ordenadores para resolver complejos problemas que se tardarían meses en hacer a mano. Es más, pensaba que Matlab era la herramienta del matemático medio :P
Pues ahorrame tiempo :D que quiero saber como almacena el algoritmo los números a la hora de operar para que falle de este modo. Cuando puse que "básicamente quiero saber como funciona la calculadora de google para hacer mal esa cuenta" era literalmente :).
Bueno, el algoritmo no, lo que se hace es reservar una cantidad de memoria para almacenar un dato. Como sabrás hay tipos de datos que usan 8 bits (char) que almacenan valores de 0 a (2^8 - 1) (255), otros 16 bits (una word), 32 bits, 64 bits y creo que hay alguno que llegan a 128 bits.
Por ejemplo, los valores enteros se usan 32 bits, que significa que se obtienen 2^32 posibles valores (haz tu la cuenta ^^U) la mitad positivos y la mitad negativos (más o menos, que luego me saltan que si el cero...).
Resumiendo mucho, los float, o números de coma flotante guardan dos partes: una es el número sin decimales, y la otra es el exponente de 10^x, por el que hay que multiplicarlo.
Por ejemplo, en 8 bits, para guardar 0.005, suponinedo 4 y 4 bits para representarlo, se diría 5=0101 para la parte entera, y 10^-3 es lo que hay que multiplicar (siempre me lio, no se si se el llama exponencial o mantisa ^^U), por lo que hay que guardar -3, que si no recuerdo mal es 1101 en complemento a 1 (0011->1100->1101), por lo que se guarda el valor binario 01011101.
Vale. Un valor float normal usa 32 bits, y un double 64 bits, por lo que el segundo tiene más facilidad para almacenar valores más exactos. Como bien has podido comprobar, estas usando números muy grandes, que exigen una parte "entera" bastante compleja, lo que fuerza a usar menos espacio para la mantisa. Pero la mantisa debe existir y debe indicar la magnnitud del número, por lo que le come espacio a la parte entera, redondeándola.
Si redondeas dos números muy próximos, para el ordenador es el mismo, y por eso al restarlos da cero. Es como cuando redondeas 5.34, para el ordenador, como entero, vale 5.
Ahora, no me pidas que te hable del caso en concreto porque no me voy a poner a decirte cuantos bits se usan de mantisa, que tipo de datos se están usando ni voy a ponerme a convertir a binario :lol:
En fin, no se si sentirme ofendido o que... que seas teleco y especializado en sistemas electronicos, no te capacita para conocer mejor la forma de programacion de un ordenador. Yo soy informatico, y trabajo con telecos y a la hora de comprender la programacion, menos 1 o 2, al resto se le nota la falta de conocimientos. Que sepas ver y comprender una placa y sus circuitos, no implica que sepas programar para ello, sin embargo yo no necesitos saber como esta hecha la placa, si no saber sus instrucciones.
Igual te estoy mal interpretando, pero trabajar con telecos que hacen la labor de un informatico,como por ejemplo programar y escucharles decir que la programacion es una mierda y creerse superiores a los informaticos me quema un huevo, cuando me demuestran cada dia lo contrario:loco:.
Un saludo
Los informáticos sois unos nulos que...
Que nooooo, que es broma :quepalmo: A mi me gustan los informáticos y en absoluto pienso que sepa programar mejor que vosotros.
Lo que me refiero es que me conozco mejor las tripas de los cacharros que usais y otros que apenas tocais. Obviamente no se necesita saber el código de microprograma de una suma para hacer una calculadora (estamos hablando a nivel binario de corrientes eléctricas) pero yo tengo que saberlo para diseñar una ALU.
Seguramente me ganes sabiendo C, C++, java, mysql, bases de datos, protocolos de comunicación, etc. Pero yo tengo que tener nociones de C y no tenerle miedo al ensamblador, porque es posible que te enseñen que tal comando es mejor que otro a ese nivel, pero yo tengo que saber por qué (porque se usa un chip especializado que tiene una ALU en serie con el gestor de interrupciones que bla bla bla).
Y no hablo sólo de procesadores: un microcontrolador, un controlador de placa, una máquina de estados, el control de una grua, añadir un joy analógico para que un gestor de interrupciones detecte las señales...
Son campos distintos: yo conozco las tripas, el informático analiza como optimizar algoritmos. Yo creo GPUs con 20 cores, tu optimizas OpenGL.
Si alguien se ha sentido ofendido, no era mi intención y espero haberme explicado con suficiente claridad.
PD: yo estuve totalmente en contra de la supresión de la carrera de informática en el plan Bolonia. He visto vuestro temario y me da miedito con tantas mates :quepalmo:
Los informáticos sois unos nulos que...
Que nooooo, que es broma :quepalmo: A mi me gustan los informáticos y en absoluto pienso que sepa programar mejor que vosotros.
Lo que me refiero es que me conozco mejor las tripas de los cacharros que usais y otros que apenas tocais. Obviamente no se necesita saber el código de microprograma de una suma para hacer una calculadora (estamos hablando a nivel binario de corrientes eléctricas) pero yo tengo que saberlo para diseñar una ALU.
Seguramente me ganes sabiendo C, C++, java, mysql, bases de datos, protocolos de comunicación, etc. Pero yo tengo que tener nociones de C y no tenerle miedo al ensamblador, porque es posible que te enseñen que tal comando es mejor que otro a ese nivel, pero yo tengo que saber por qué (porque se usa un chip especializado que tiene una ALU en serie con el gestor de interrupciones que bla bla bla).
Y no hablo sólo de procesadores: un microcontrolador, un controlador de placa, una máquina de estados, el control de una grua, añadir un joy analógico para que un gestor de interrupciones detecte las señales...
Son campos distintos: yo conozco las tripas, el informático analiza como optimizar algoritmos. Yo creo GPUs con 20 cores, tu optimizas OpenGL.
Si alguien se ha sentido ofendido, no era mi intención y espero haberme explicado con suficiente claridad.
PD: yo estuve totalmente en contra de la supresión de la carrera de informática en el plan Bolonia. He visto vuestro temario y me da miedito con tantas mates :quepalmo:
Vale, no ves?soy un bocas y te habia entendido mal :brindis:. Mis clases de electronica digital y arquitectura de computadores me dan conocimientos de ese campo, pero nunca seran suficientes como los tuyos o los de un electronico.
Hasta otra
Vale, no ves?soy un bocas y te habia entendido mal :brindis:. Mis clases de electronica digital y arquitectura de computadores me dan conocimientos de ese campo, pero nunca seran suficientes como los tuyos o los de un electronico.
Hasta otra
Si te sirve de consuelo, por lo visto, hay telecos que sí, que se las dan de sabios en todos los campos. No se si es que soy tan "novato" que aun no me han pervertido, o que mi afición por el diseño de videojuegos me han convertido en gran amigo de los informáticos.
Muy a menudo me han preguntado que por qué no me metí en informática y mira, ahora se "algo" de programación, mucho de electrónica, mucho de ordenadores, algo de señales...
Dullyboy
25/04/2010, 16:26
Qué raro, tenía entendido que a día de hoy todos los matemáticos tiraban de ordenadores para resolver complejos problemas que se tardarían meses en hacer a mano. Es más, pensaba que Matlab era la herramienta del matemático medio :P
Matlab es sumamente útil, pero por lo menos yo no lo he usado en ninguna otra asignatura que no fuese un númerico (bueno sí, en una optativa para dibujar fractales, pero la asignatura la dan desde el departamento de aplicada así que normal :D). De lo que son los departamentos de matemáticas, usan ordenadores normalmente los de Aplicada que es donde están los de numérico y los de Estadística e Investigación Operativa (pero estos utilizan otros programas).
Luego los de Álgebra, Análisis y Geometría y topología no utilizan para nada ordenadores, ya que si en algún momento necesitan de la fuerza bruta de un ordenador eso ya entraría en las "compentencias" de los de Aplicada :).
Mucha gente piensa que en la carrera de matemáticas se ven números sin parar, cuando en realidad es lo contrario, se hace todo de forma general, por lo que con lo que acabamos al final la carrera es un conocimiento genial de los alfabetos europeos :D.
Resumiendo mucho, los float, o números de coma flotante guardan dos partes: una es el número sin decimales, y la otra es el exponente de 10^x, por el que hay que multiplicarlo.
Por ejemplo, en 8 bits, para guardar 0.005, suponinedo 4 y 4 bits para representarlo, se diría 5=0101 para la parte entera, y 10^-3 es lo que hay que multiplicar (siempre me lio, no se si se el llama exponencial o mantisa ^^U), por lo que hay que guardar -3, que si no recuerdo mal es 1101 en complemento a 1 (0011->1100->1101), por lo que se guarda el valor binario 01011101.
Está mal el ejemplo (aunque gracias a eso me está ayudando a entender porque hace eso al ponerle decimales la calculadora de Google, además de lo de la coma flotante que cansé de escucharlo pero que nunca me había puesto a buscar como funcionaba :)). Primero tienes que pasar el número a binario, y en binario 0.005 es aproximadamente 0.0000000101. Además el exponente se saca estando en binario y no en decimal, por lo que sería 8. (Lo del complemento ya no se lo que es).
Vale. Un valor float normal usa 32 bits, y un double 64 bits, por lo que el segundo tiene más facilidad para almacenar valores más exactos. Como bien has podido comprobar, estas usando números muy grandes, que exigen una parte "entera" bastante compleja, lo que fuerza a usar menos espacio para la mantisa. Pero la mantisa debe existir y debe indicar la magnnitud del número, por lo que le come espacio a la parte entera, redondeándola.
Si redondeas dos números muy próximos, para el ordenador es el mismo, y por eso al restarlos da cero. Es como cuando redondeas 5.34, para el ordenador, como entero, vale 5.
Ahora, no me pidas que te hable del caso en concreto porque no me voy a poner a decirte cuantos bits se usan de mantisa, que tipo de datos se están usando ni voy a ponerme a convertir a binario :lol:
Si hombre si ya se que en el fondo es un problema de redondeo, y si la cosa fuese que a partir de 15 cifras siempre diese 0, u otro fallo que fuese "lineal" por decirlo de algún modo, no habría perdido más de 5 mínutos, pero es que sigo probando cosas y me pica demasiado la curiosidad :D:
(Esto lo probé varias veces para que no me pasase como con lo del primer post :))
199999998/199999997 = 1.00000001 (http://www.google.es/#hl=es&safe=off&q=199999998%2F199999997&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=5a8af0def444f0cd)
199999999/199999998 = 1 (http://www.google.es/#hl=es&safe=off&q=199999999%2F199999998&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=5a8af0def444f0cd)
200000000/199999999 = 1.00000001 (http://www.google.es/#hl=es&safe=off&q=200000000%2F199999999&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=5a8af0def444f0cd)
Ahora ya es más o menos obvio que hace algo por el medio que, supongo, reducirá el error de forma general y/o reducirá el número de operaciones, pero que genera aproximaciones raras con números un poco grandes.
FlipFlopX
25/04/2010, 18:00
***** Drumpi, yo también estudio esa carrera y siendo sincero "controlamos" mejor de arquitectura de computadores y sus asm que de señales...Como dijo un día un profesor de digitales, vosotros con esta carrera sois los ñapas de la tecnología, valeis para un roto y un descosido xD
Hola
al margen del origen del problema para este tipo de cálculos (que creo que se ha explicado bastante bien algo más arriba), sin tener que andar instalando nada de software en el ordenador, mejor usar Wolfram Alpha, que utiliza el motor de Mathematica (http://www.wolfram.com/mathematica/) para calcular:
http://www.wolframalpha.com/input/?i=399999999999999-399999999999998
***** Drumpi, yo también estudio esa carrera y siendo sincero "controlamos" mejor de arquitectura de computadores y sus asm que de señales...Como dijo un día un profesor de digitales, vosotros con esta carrera sois los ñapas de la tecnología, valeis para un roto y un descosido xD
Pues te digo una cosa: dos asignaturas tenemos de tratamiento de señales (hay un laboratorio, pero es para aprender ASM de un DSP, no a trabajar con señales propiamente dichas) y con esas ya sabes lo suficiente para trabajar con CUALQUIER señal (de hecho, al terminar, me puse a mirar las características de un TDT y creeme, es muy "sencillo" hacer un receptor, sobre todo por software).
Una vez que te metes en frecuencias con Fourier, ya está casi todo hecho :P
Dullyboy
26/04/2010, 12:41
Hola
al margen del origen del problema para este tipo de cálculos (que creo que se ha explicado bastante bien algo más arriba), sin tener que andar instalando nada de software en el ordenador, mejor usar Wolfram Alpha, que utiliza el motor de Mathematica (http://www.wolfram.com/mathematica/) para calcular:
http://www.wolframalpha.com/input/?i=399999999999999-399999999999998
Está claro. Antes pensaba que estaba bien Google para hacer estas operaciones rápidas. Pero que la calculEsadora que compré cuando iba al instituto haga mejor algunas operaciones (como la de dividir 200000000/199999999) que Google hace que no fie nunca más :).
No le echeis la culpa a un programa que ha hecho un becario aburrido en su trabajo por lo que puede hacer una máquina dedicada con varios años de desarrollo a sus espaldas :D:D:D
Es que no pueden coger el código de otras calculadoras existentes porque si no, no es de su propiedad y el plan de dominación mundial de Google se vendría abajo, y entonces viviríamos en un mundo dominado por Splinter o por Anarchy, que son los siguientes.
:lol:
La virgen,,, estoy por tomarme una aspirina después de leerme cada post del hilo... Anda.. y cómo soy de letras, ahí va un soneto numérico con rima consonante:
1548651 123584 12345
1235489 156698 12436
1235489 159951 45236
9872564 128564 52845
3684251 625984 16536
4654658 958217 11945
3698745 169435 32545
9265482 169873 56436
1265495 123854 35972
6657954 126845 26589
1269215 261645 23500
1295432 236815 66172
1265847 367954 21589...
¡ 1562367 889752 32100 !
:confused::confused::confused:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.