¿Alguien conoce un generador aleatorio de programas C que incluya cálculos de coma flotante?Generación aleatoria de programas C con coma flotante
Estoy buscando algo que se parezca un poco a Csmith, excepto que Csmith no genera expresiones de coma flotante, y que genera toneladas de otras construcciones, por lo que es un poco difícil de modificar. La generación de cálculos secuenciales sería un buen comienzo para mi propósito siempre que estos incluyan algunos de coma flotante. Condicionales sería incluso mejor, pero no necesitaría bucles, punteros o incluso arreglos.
Dado que muchos lenguajes utilizan una sintaxis similar a C, tal generador puede no ser específico de C. Incluso si es específico de otro lenguaje tipo C, podría ser capaz de procesar un programa generado por texto. ese lenguaje en un programa de C.
EDITAR: aquí hay un fragmento de un programa generado por Csmith para aclarar lo que estoy buscando.
...
int64_t *l_374 = &g_189;
int32_t l_375 = (-1L);
int i, j, k;
l_375 &= ((g_106 == ((*l_374) = (&g_324[4] == l_373[0][0][5]))) < 0x80C8L);
return (*g_207);
...
También debo aclarar que, teniendo un programa csmith y sustituyendo, por ejemplo, int64_t
con float
puede dar un programa en C sintácticamente correcta, es casi seguro que no dará un programa definido. Puedo probar si un programa sustituido contiene un comportamiento indefinido, pero esto no es barato, y si tengo que rechazar el 99% de los programas sustituidos porque no están definidos, el proceso será demasiado lento para ser útil.
estoy totalmente privado del sueño en este momento, así que lo siento si esto es una estupidez, pero estoy leyendo este derecho? ¿Quieres generar aleatoriamente programas en C? ¡Lejos! ¡Bien en ti! ¿Por qué? : P – TheIronKnuckle
@TheIronKnuckle Para "pruebas diferenciales": compila un programa C * definido * generado aleatoriamente con dos compiladores diferentes, y si los programas dan resultados diferentes, has encontrado un error en uno de los compiladores. http://www.linux-mips.org/pub/linux/mips/people/macro/DEC/DTJ/DTJT08/DTJT08PF.PDF –
@TheIronKnuckle Bueno, es un poco más complicado con el punto flotante, porque flotando -punto no especificado en C99, y dos compiladores serían correctos y darían resultados diferentes en presencia de coma flotante. Esta es la razón por la cual la función no se incluyó en Csmith. Pero todavía creo que podría usar programas aleatorios de coma flotante para mi propósito. –