Autor Tema: Proyecto de Curso (Comentarios): Programación en C (2013, por Argentinator)

0 Usuarios y 1 Visitante están viendo este tema.

21 Enero, 2013, 07:05 pm
Respuesta #170

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Es una confusión muy común la del void main(void).

Creo que es muy posible que se enseñe mal desde los libros.

Yo desde ahora voy a respetar el estándar, que dice que NO, que sólo puede ir: int main(...)

El estándar exige esto debido a que se busca compatibilidad con muchos programas que esperan un valor de retorno de los programas hechos en C.


21 Enero, 2013, 10:54 pm
Respuesta #171

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Un nuevo post, esta vez sobre los tipos de punto flotante y el compilador GCC.

Esto tiene una gran importancia práctica porque estamos usando el compilador GCC, el cual tiene algunos problemas en relación al punto flotante.
Creo que es dependiente del hardware aún, es decir, son problemas técnicos bastante difíciles que no me siento capacitado de entender todavía (pues esto requiere estudiar la arquitectura de todos los microprocesadores del mundo, cosa que nunca he hecho).

Sin embargo, podremos experimentar seguramente con nuestro propio micro, y ver qué hace en relación al punto flotante.

21 Enero, 2013, 11:58 pm
Respuesta #172

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Buenas.

He hecho un cambio en el post sobre la configuración del compilador.

Antes les había indicado que pongan la opción -std=c9x.

Ahora la he cambiado para adherirnos al estándar C99 exclusivamente, lo cual se logra con algunas de las dos opciones siguientes:

-std=c99

o bien:

-std=c99 -pedantic

El post con los cambios sería éste:

http://rinconmatematico.com/foros/index.php?topic=64835.msg260748#msg260748


Con esto, dejará de funcionar el programita HolaMundo2bisbis.c (que entonces quizá lo termine quitando de la teoría), y el menos importante ExperimentoBasura.c.

Esos programas están en las secciones: "De la eficacia a la elegancia - Macros del Preprocesador (parte I)" y "(parte II)".



Saludos

22 Enero, 2013, 12:05 am
Respuesta #173

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,330
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino

El post con los cambios sería éste:

http://rinconmatematico.com/foros/index.php?topic=64835.msg260748#msg260748


Con esto, dejará de funcionar el programita HolaMundo2bisbis.c (que entonces quizá lo termine quitando de la teoría), y el menos importante ExperimentoBasura.c.

Esos programas están en las secciones: "De la eficacia a la elegancia - Macros del Preprocesador (parte I)" y "(parte II)".



Saludos

De acuerdo, voy a hacer el cambio.

Saludos.

22 Enero, 2013, 02:26 am
Respuesta #174

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
He agregado un párrafo al post que presenta los tipos de datos de punto flotante en el estándar de C, porque descubrí que hay dos tipos de datos extra definidos, que no habìa tenido en cuenta.

El post:

http://rinconmatematico.com/foros/index.php?topic=64835.msg261637#msg261637

El párrafo.

Citar
Otros tipos de punto flotante declarados en C,

En la librería math.h del estándar C están especificados, acorde a lo requerido por C99, los siguientes tipos de punto flotante:

float_t
double_t

Estos tipos de datos están pensados de la siguiente manera:

Supongamos que en nuestro sistema es posible acceder a tipos de punto flotante que tienen al menos la misma exactitud que float y/o double, pero que además permiten realizar cálculos más eficientes.
En ese caso, el programador puede elegir tomar ventaja de esa eficiencia, y para ello no tendría que hacer muchos cambios en su programa fuente en C, sino hacer algo tan simple como escribir float_t en vez de float y/o double_t en vez de double.

Qué es lo que representan exactamente estos tipos depende del hardware y/o de la implementación local del compilador, etc.
Sin embargo, el estándar C99 establece una pautas mínimas que han de cumplir,
y que dependen del valor asignado a la macro FLT_EVAL_METHOD, que está definida en la librería float.h:

Si el valor de FLT_EVAL_METHOD es 0,
entonces float_t coincide con float, y double_t coincide con double.

Si el valor de FLT_EVAL_METHOD es 1,
entonces float_t y double_t coinciden ambos con double.

Si el valor de FLT_EVAL_METHOD es 2,
entonces float_t y double_t coinciden ambos con long double.

Para otros valores de FLT_EVAL_METHOD, es la implementación local la que debe especificar qué tipos son float_t y double_t.

22 Enero, 2013, 12:16 pm
Respuesta #175

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,330
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Ya he visto el programa  :o

 Lo he guardado y lo he ejecutado, lo iré mirando más.

Saludos.

28 Enero, 2013, 01:58 am
Respuesta #176

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Bueno.

El programa anterior lo quité, y puse otro parecido, pero que no tiene la última parte.

Como sea, hay 3 posts de testeo de tipos de punto flotante, con 3 programas de testeo.

El primero testea los límites de las constantes de punto flotante de float.h.
El segundo muestra lo que pasa con las macros de infinitos y valores NaN, y macros que clasifican valores de datos punto flotante, que están en math.h.
El tercero pone a prueba las macros de clasificación, jugando con valores típicos, y así vemos si todo anda como esperamos.

Encontré una anomalía en el rango de los números subnormales float y double, porque no los reconoce como subnormales, sino como valores "normales".

Pienso que esto es un error del compilador.

Igual me queda la duda, porque el estándar es algo confuso en esa cuestión.

En realidad no está declarada la macro __STDC_ISO_IEC_559__,
así que el compilador tiene la libertad de interpretar algunas cosas a su antojo.
Pero no sé si aún así es correcto que interprete números subnormales como si fueran "normales de tipo long double".


28 Enero, 2013, 02:56 am
Respuesta #177

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,330
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Bueno.

El programa anterior lo quité, y puse otro parecido, pero que no tiene la última parte.

Como sea, hay 3 posts de testeo de tipos de punto flotante, con 3 programas de testeo.



Los he estado leyendo, aún no los he puesto a correr en la ID, pero mañana los pruebo.

 Saludos y buenas noches.

28 Enero, 2013, 07:34 pm
Respuesta #178

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,330
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Ya he visto la nueva entrada sobre los complejos en C++. Tendré que repasar, porque como ya soy mayor muchos complejos los he dejado atrás :D

 Saludos.

28 Enero, 2013, 08:43 pm
Respuesta #179

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,739
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
El repaso que hace que hacer de los complejos está puesto ahí.

Y a medida que surjan otras cuestiones, las iremos recordando.

Mi idea es que no necesitemos mucho más que lo que voy poniendo en la teoría.

Por ahora solamente vamos a ver qué diablos significa para el lenguaje C un número complejo, cómo los representa, qué hace con los valores infinitos, y cómo coordina las partes real e imaginaria.

O sea, cosas muy sencillas. Por ejemplo, como se pone en C la dichosa i, la unidad imaginaria.

Por ahora sólo nos interesan cuestiones senciilas: ¿cómo y con qué reglas se especifican constantes numéricas en C? ¿Cómo las interpreta internamente, o cómo las guarda en memoria? ¿Cómo redondea cuando la precisión interna se le acabó? ¿Qué convenciones hay, qué excepciones, cómo mostrar correctamente los resultados numéricos, qué precauciones hay que tomar?

La principal dificultad no está en recordar la teoría matemática de los números, sino, a mi juicio, en el hecho de que el lenguaje C tiene varios tipos de datos distintos para lo que nosotros, matemáticamente, entendemos como un solo conjunto de números.

Así, hay 3 tipos de datos para representar números reales.
Cada uno con características propias de precisión y tamaño.
Pero como nos interesa usarlos a todos en combinación, para representar números reales cualesquiera,
hay que estudiar la manera correcta en que se pueden intercambiar esos tipos de datos, para que no tengamos resultados erróneos, o comportamientos inesperados.

Las dificultades están en la parte del lenguaje C y sus detalles, y no en la parte matemática.