elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Loco?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Loco?  (Leído 7,082 veces)
Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
¿Loco?
« en: 25 Abril 2010, 23:19 pm »

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5.  
  6. int main(){
  7.    float a=5/2;
  8. printf("%f",a);
  9. return 0;
  10. }

Output:
Citar
2.000000
Process returned 0 (0x0)   execution time : 0.062 s
Press any key to continue.

Madre mia, llevo dos dias de finde sin dormir y nose que me pasa..haber si mañana me aclaro, bueno mi duda principal es orque sale 2 y no: "2.5" ¿??¿?¿?¿?

SAludosss


En línea


Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ¿Loco?
« Respuesta #1 en: 25 Abril 2010, 23:23 pm »

Porque estas dividiendo dos enteros:

Código
  1. float a=5/2.0;

o

Código
  1. float a=5/(float)2;

Cualquiera de las dos formas debería funcionar.

Saludos

PD: Usa títulos descriptivos para los posts.


En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: ¿Loco?
« Respuesta #2 en: 25 Abril 2010, 23:30 pm »

Código:
float a=5/2F;
creo recordar que también chuta
Código:
float a=5/2.0;
no lo he probado, pero 2.0 no se refiero al double?, da igual cast implícito pero bueno.
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ¿Loco?
« Respuesta #3 en: 25 Abril 2010, 23:52 pm »

También se puede así:

Código
  1. float a=5/2.;

Código:
float a=5/2F;
creo recordar que también chuta
Código:
float a=5/2.0;
no lo he probado, pero 2.0 no se refiero al double?, da igual cast implícito pero bueno.

Las constantes de punto flotante siempre son double, el sufijo (u el cast) se utiliza en el caso que quieras especificar que sean float, pero se usa así:

Código
  1. float a=5/2.0f;
Código
  1. float a=5/2.f;

etc

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: ¿Loco?
« Respuesta #4 en: 26 Abril 2010, 01:41 am »

Las constantes de punto flotante siempre son double, el sufijo (u el cast) se utiliza en el caso que quieras especificar que sean float, pero se usa así:
Pero cuando dices 2F, no es un float a cualquier nivel?, quiero decir que no hay cast en teoría, en cambio si dices float = 2.0; hay un cast implícito de double a float, aunque ya sé que el compilador el que sea lo optimizará, supongo que si lo compilasemos con cualquier cosa no habría un cast "real"...
Más concretamente yo siempre tuve la idea de que es un float a nivel de token, nunca he mirado el código del gcc, pero tendría bastante sentido, yaque se puede diferenciar de un double con una expresion regular.
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ¿Loco?
« Respuesta #5 en: 26 Abril 2010, 01:56 am »

Es que si haces 2F el sufijo se lo aplicas a una constante entera, ni siquiera es un sufijo valido para un entero  ;D.

Saludos!
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: ¿Loco?
« Respuesta #6 en: 26 Abril 2010, 14:33 pm »

Pues yo creo que es un diferenciador de token como si pones 2e0(da double), o sea, porque si pones (2+3)F no creo que funcione, claro que no es constante de cara al compilador, de hecho 2 F no se puede poner, porque no es una construccion sintática, es léxica, y a nivel léxico aun no hay tipos, sólo tokens, los tipos se asignan una vez estando en el ast, (o posiblemente antes en el analizador sintáctico). :)
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ¿Loco?
« Respuesta #7 en: 26 Abril 2010, 19:17 pm »

A ver, no tiene nada que ver una cosa con la otra. Que 2e0 sea double no infiere nada mas que eso, en todo caso 2e0f es float. Yo lo único que te aclare fue que esto:

Código:
float a=5/2F;
creo recordar que también chuta

es incorrecto.

En cualquiera de los casos un compilador decente optimizara en la medida de lo posible, a lo mínimo en asignaciones y en parámetros de funciones.

En cuanto al resto, no se trata de "creer". Todo código fuente en algún momento se descompone en lo que se llama "preprocessing tokens" y luego de realizar el procedimiento especifico se convierten en "tokens". Es ese resultado el que se analiza en forma semántica y sintáctica.
Igualmente la descripción de las fases de traducción siempre son conceptuales ya que siempre depende del estándar que siga el entorno que se utiliza y como se lo implemente, pero sea como sea lejos están de ser creencias.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: ¿Loco?
« Respuesta #8 en: 26 Abril 2010, 19:59 pm »

A ver, no tiene nada que ver una cosa con la otra. Que 2e0 sea double no infiere nada mas que eso, en todo caso 2e0f es float. Yo lo único que te aclare fue que esto:

Código:
float a=5/2F;
creo recordar que también chuta

es incorrecto.

En cualquiera de los casos un compilador decente optimizara en la medida de lo posible, a lo mínimo en asignaciones y en parámetros de funciones.

En cuanto al resto, no se trata de "creer". Todo código fuente en algún momento se descompone en lo que se llama "preprocessing tokens" y luego de realizar el procedimiento especifico se convierten en "tokens". Es ese resultado el que se analiza en forma semántica y sintáctica.
Igualmente la descripción de las fases de traducción siempre son conceptuales ya que siempre depende del estándar que siga el entorno que se utiliza y como se lo implemente, pero sea como sea lejos están de ser creencias.

Saludos
Tienes razón no te entendí lo de que no es 2F sino 2.F o 2.0f, crei que eran otras alternativas válidas
Cuando digo "creo" es porque no estoy seguro. No por algun tipo de fe  :laugh:
Sólo para que quede claro (lo que trataba de explicar antes *con un ejemplo incorrecto*)
Ahora lo he mirado, no es una creencia ni suposicion ni depende de la implementacion, porque C es un lenguaje con un estándar y si algo no sigue el estándar no es C, el estándar C99 es objetivo(tambien está en el C89) y pone An unsuffixed floating constant has type double. If suffixed by the letter f or F, it has type float. If suffixed by the letter l or L, it has type long double.
O sea que 2.f es float siempre, no hay ningun cast por medio, solo eso.
Perdón por el malentendido, me he liado yo solo  :silbar:
En línea

Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: ¿Loco?
« Respuesta #9 en: 26 Abril 2010, 22:39 pm »

Otra duda solo me llega hasta 6 decimales y yo quiero sobre 50 o por ahi.
En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
configurar nanostatio loco 2
Dudas Generales
yumyram 1 2,392 Último mensaje 8 Junio 2011, 13:56 pm
por yumyram
CONFIGURACION DE LOCO M2
Redes
INTER-RED 1 1,848 Último mensaje 22 Octubre 2012, 16:31 pm
por Sk9ITk5Z
Problema con nanoestacion loco m2
Redes
pany31 2 1,881 Último mensaje 17 Febrero 2018, 18:05 pm
por AXCESS
El mouse va loco la ruedecita al bajar y subir! « 1 2 »
Windows
win_7 17 6,153 Último mensaje 25 Enero 2021, 01:19 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines