On 05/30/2011 03:37 AM, Joe Cabezas wrote: > excelente respuesta, no sabia que los numeros eran interpretados como double > > cual es la diferencia con el static_cast? > > finalmente lo resolvia asi: > > float mm = 0.4; > float nn = 2.8; > int xx = 3; > > float c1 = (mm * xx + nn); > int c2 = c1; > > cout << "c1: " << c1 << endl; > cout << "c2: " << c2 << endl; > > lo que me sorprende es que en distintos sistema que se suponen ocupan el > mismo sistema o el mismo compilador den resultados distintos..., tu que > sabes, como explicas esto? > > muchas gracias por el tiempo de atender mi duda, te lo agradezco un monton. > > -Joe
Hay muchas cosas que mencioné que estaban mal y le debo haber alegrado el día a mas de algún listero: - En la parte final el código había un 1 en lugar de un 3 haciendo que todo el ejemplo esté mal, epic fail. - En la sección sobre las conversiones implícitas en operaciones aritméticas, funciona distinto (promoción de tipos): antes de realizarse la operación, si los tipos son distintos, el tipo de menor precisión se convierte al de mayor precisión. Adicionalmente pueden haber más conversiones implícitas, por ejemplo, antes de almacenar el resultado en una variable de tipo distinto. g++ tiene muchas versiones, muchos flags (distintos optimizaciones, distintos sets de instrucciones, etc.), está en muchas arquitecturas y en resumen hay muchas combinaciones posibles que se pueden dar. Habría que ver que flags se usaron, que versión fue y en qué arquitectura pasó. Y tambien existen casos extremos como el mítico bug FDIV de las FPU de los procesadores Pentium que hacía que las divisiones de punto flotante dieran resultados erróneos. Sobre el operador static_cast: Hay varios operadores de conversión de tipos en C++: static_cast, dynamic_cast, reinterpret_cast, const_cast. Este post lo explica en horrendo detalle: http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used/332080#332080 Saludos, Felipe

