float __addsf3(float a, float b) { float_t fa; float_t fb; float_t res; fa.val = a; fb.val = b; if (fa.data.parts.sign != fb.data.parts.sign) { if (fa.data.parts.sign) { fa.data.parts.sign = 0; res.data = sub_float(fb.data, fa.data); return res.val; } fb.data.parts.sign = 0; res.data = sub_float(fa.data, fb.data); return res.val; } res.data = add_float(fa.data, fb.data); return res.val; }
int32_t CodeBuilder::addop_float( Op opcode,double t_double ) { int arg = add_float(t_double); if (arg < 0) return 0; return addop_i(opcode, arg); }
ObjectSettings BicyclePlatform::get_settings() { auto result = GameObject::get_settings(); result.add_float(_("X"), &m_center.x, "x", 0.0f, OPTION_HIDDEN); result.add_float(_("Y"), &m_center.y, "y", 0.0f, OPTION_HIDDEN); result.add_int(_("Platforms"), &m_platforms, "platforms", 2); result.add_float(_("Radius"), &m_radius, "radius", 128); result.add_float(_("Momentum change rate"), &m_momentum_change_rate, "momentum-change-rate", 0.1f); result.reorder({"platforms", "x", "y"}); return result; }
/* * PROCEDURE : main * * GLOBAL : * Toutes les variables globales. * * INPUT : * argc Nombre de parametres de la ligne de commande du programme. * argv Tableau des parametres de la ligne de commande du programme. * argv[0] Nom du programme. * envp Tableau des parametres d'environnement du programme. * * DESCRIPTION : * La procedure teste le fonctionnement et le temps execution des procedures * du fichier. * * RETOUR : * La valeur nulle est retournee si le programme s'execute sans erreur. * Sinon une valeur non nulle est retournee. * * HISTORIQUE : * 1.00 - 06/07/95 - Original. */ void main (int argc, char *argv[]) { extern long atol (const char *); long basen; /* base d'iterations */ size_t i; if (argc != 2) { print_usage (); exit (1); } basen = atol (argv[1]); /* initailise les tableaux */ for (i = 0; i < BUFSIZE; i++) a[i] = (float) rand (); for (i = 0; i < BUFSIZE; i++) b[i] = 1.F; LOOP(add_float (a, b, BUFSIZE), basen); LOOP(addinc_float (a, b, BUFSIZE, 1, 1), basen); LOOP(subtract_float (a, b, BUFSIZE), basen); LOOP(subinc_float (a, b, BUFSIZE, 1, 1), basen); LOOP(multiply_float (a, b, BUFSIZE), basen); #if 0 LOOP(addconst_float (a, (float) 1.0, BUFSIZE), basen); LOOP(dot_float (a, b, BUFSIZE), basen); LOOP(dotinc_float (a, b, BUFSIZE, 1, -1), basen); LOOP(multconst_float (a, (float) 1.0, BUFSIZE), basen); LOOP(multiply_float (a, b, BUFSIZE), basen); #endif exit (0); }
/* * PROCEDURE : firy_n_float * * INPUT : * ima_in Pointeur sur la pyramide de l'image. * * OUTPUT : * ima_filt Pointeur sur la pyramide de gradient spatial. * On obtient les gradients suivant x ou y en fonction de * la valeur des coefficients du filtre contenus dans "coefs". * * INPUTS : * coefs Pointeur sur les coefficients du filtre. * taille Taille du filtre. * * DESCRIPTION : * La procedure effectue un filtrage taille X taille de * l'image "ima_in". Ce filtrage correspond au calcul d'un gradients, * suivant x ou y, selon la valeur des coefficients du filtre contenus * dans "coefs" * * HISTORIQUE : * 1.00 - 01/01/95 - Original. */ static bool firy_n_float (TImageShort *ima_in, TImageFloat *ima_filt, float *coefs, size_t taille) { size_t midsize = taille / 2; size_t xsize = (size_t) ima_in->nbco; size_t ysize = (size_t) ima_in->nbli; void (*fir_float) (const float *, float *, size_t, const float *); float *src; float *dst; size_t y; // Test si filtre applicable if ((xsize < midsize) || (ysize < midsize)) { return false; } switch (taille) { case 3 : fir_float = firf3sym_float; break; case 5 : fir_float = firf5sym_float; break; case 7 : fir_float = firf7sym_float; break; default : return false; } if ((src = (float *) malloc (xsize * sizeof(float))) == (float *) NULL) return false; if ((dst = (float *) malloc (xsize * sizeof(float))) == (float *) NULL) { free ((void *) src); return false; } set_float (ima_filt->ad, 0.F, xsize * ysize); for (y = 0; y < ysize; y++) { int i; cast_short_float (MIJ(ima_in->ad, y, 0, xsize), src, xsize); for (i = 0; i < (int) midsize; i++) { (*fir_float) (src, dst, xsize - (taille - 1), MIJ(coefs, i, 0, taille)); if ((y + midsize >= (size_t) i) && (y + midsize < ysize + i)) add_float ( MIJ(ima_filt->ad, y + midsize - i, midsize, xsize), dst, xsize - (taille - 1)); if (y + i >= midsize && y + i < ysize + midsize) subtract_float ( MIJ(ima_filt->ad, y + i - midsize, midsize, xsize), dst, xsize - (taille - 1)); } } for (y = 0; y < midsize; y++) { set_float (MIJ(ima_filt->ad, y, 0, xsize), 0.F, xsize); set_float (MIJ(ima_filt->ad, ysize - y - 1, 0, xsize), 0.F, xsize); } free ((void *) src); free ((void *) dst); return true; }