/* from/to/value have changed ... update the widgets. */ static void tslider_real_changed( Tslider *tslider ) { GtkAdjustment *adj = tslider->adj; GtkWidget *entry = tslider->entry; #ifdef DEBUG printf( "tslider_real_changed: %p, val = %g\n", tslider, tslider->value ); #endif /*DEBUG*/ if( tslider->auto_link ) tslider->svalue = tslider_value_to_slider( tslider, tslider->value ); gtk_signal_handler_block_by_data( GTK_OBJECT( adj ), tslider ); gtk_signal_handler_block_by_data( GTK_OBJECT( entry ), tslider ); /* Some libc's hate out-of-bounds precision, so clip, just in case. */ set_gentry( tslider->entry, "%.*f", IM_CLIP( 0, tslider->digits, 100 ), tslider->value ); gtk_scale_set_digits( GTK_SCALE( tslider->slider ), tslider->digits ); if( !DEQ( tslider->from, tslider->last_from ) || !DEQ( tslider->to, tslider->last_to ) ) { double range = tslider->to - tslider->from; adj->step_increment = range / 100; adj->page_increment = range / 10; adj->page_size = range / 10; adj->lower = tslider->from; adj->upper = tslider->to + adj->page_size; tslider->last_to = tslider->to; tslider->last_from = tslider->from; gtk_adjustment_changed( adj ); } if( !DEQ( tslider->svalue, tslider->last_svalue ) ) { adj->value = tslider->svalue; tslider->last_svalue = tslider->svalue; gtk_adjustment_value_changed( adj ); } gtk_signal_handler_unblock_by_data( GTK_OBJECT( adj ), tslider ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( entry ), tslider ); }
/*! * @brief An entry point of this program * @return exit-status */ int main(void) { static const double x = 7.9; double y = x; uint cnt = 0; double prev_y = 0.0; while (!DEQ(y, prev_y)) { cnt++; prev_y = y; y = convert(y); } printf("%fに関数を%u回用いると%fになります\n", x, cnt, y); return EXIT_SUCCESS; }
/* after the body has been imported via MPI calls, * read body data from file and compare */ void PSC_Test_Body (BODY *bod) { char txt [1024]; FILE *f; BODY a; int i; snprintf (txt, 1024, "%s/body%d.data", bod->dom->solfec->outpath, bod->id); ASSERT (f = fopen (txt, "r"), ERR_FILE_OPEN); fread (&a.kind, sizeof (a.kind), 1, f); if (a.kind != bod->kind) { ASSERT_TEXT (0, "PSC ERROR: kind"); } #if 0 fread (&i, sizeof (int), 1, f); fread (txt, sizeof (char), i, f); txt[i] = '\0'; if (strcmp (txt, bod->mat->label) != 0) { ASSERT_TEXT (0, "PSC ERROR: material"); } #endif fread (&a.ref_mass, sizeof (double), 1, f); if (a.ref_mass != bod->ref_mass) { ASSERT_TEXT (0, "PSC ERROR: ref_mass"); } fread (&a.ref_volume, sizeof (double), 1, f); if (a.ref_volume != bod->ref_volume) { ASSERT_TEXT (0, "PSC ERROR: ref_volume"); } fread (&a.ref_center, sizeof (double), 3, f); for (i = 0; i < 3; i ++) { if (a.ref_center [i]!= bod->ref_center [i]) { ASSERT_TEXT (0, "PSC ERROR: ref_center"); } } fread (&a.ref_tensor, sizeof (double), 9, f); for (i = 0; i < 9; i ++) { if (a.ref_tensor [i]!= bod->ref_tensor [i]) { ASSERT_TEXT (0, "PSC ERROR: ref_tensor"); } } fread (&a.dofs, sizeof (int), 1, f); if (a.dofs != bod->dofs) { ASSERT_TEXT (0, "PSC ERROR: dofs"); } fread (&a.form, sizeof (a.form), 1, f); if (a.form != bod->form) { ASSERT_TEXT (0, "PSC ERROR: form"); } int confsize = bod->kind != FEM ? 12 : bod->form == REDUCED_ORDER ? bod->dofs + 9 : bod->dofs; ERRMEM (a.conf = malloc (sizeof (double [confsize]))); fread (a.conf, sizeof (double), confsize, f); for (i = 0; i < confsize; i ++) { if (a.conf [i] != bod->conf [i]) { ASSERT_TEXT (0, "PSC ERROR: conf"); } } free (a.conf); ERRMEM (a.velo = malloc (sizeof (double [a.dofs]))); fread (a.velo, sizeof (double), a.dofs, f); for (i = 0; i < bod->dofs; i ++) { if (!DEQ(a.velo[i], bod->velo[i])) /* XXX: differs after 15th decimal place => why is ONLY velocity giving this kind of trouble? */ { double x = fabs (a.velo[i]-bod->velo[i]), y = DBL_EPSILON; printf ("%.17f > %.17f\n", x, y); ASSERT_TEXT (0, "PSC ERROR: velo => %d => %.17f != %.17f", i, a.velo[i], bod->velo[i]); } } free (a.velo); /* TODO => bod->forces */ /* TODO => bod->cra */ a.shape = psc_read_shape (f); if (psc_compare_shapes (a.shape, bod->shape) == 0) { ASSERT_TEXT (0, "PSC ERROR: shape"); } SHAPE_Destroy (a.shape); fread (&a.scheme, sizeof (a.scheme), 1, f); if (a.scheme != bod->scheme) { ASSERT_TEXT (0, "PSC ERROR: scheme"); } a.inverse = psc_read_matrix (f); if (psc_compare_matrices (a.inverse, bod->inverse) == 0) { ASSERT_TEXT (0, "PSC ERROR: inverse"); } psc_matrix_free (a.inverse); a.M = psc_read_matrix (f); if (psc_compare_matrices (a.M, bod->M) == 0) { ASSERT_TEXT (0, "PSC ERROR: M"); } psc_matrix_free (a.M); a.K = psc_read_matrix (f); if (psc_compare_matrices (a.K, bod->K) == 0) { ASSERT_TEXT (0, "PSC ERROR: K"); } psc_matrix_free (a.K); fread (&a.damping, sizeof (double), 1, f); if (a.damping != bod->damping) { ASSERT_TEXT (0, "PSC ERROR: damping"); } fread (&i, sizeof (int), 1, f); if (i && bod->evec == NULL) { ASSERT_TEXT (0, "PSC ERROR: evec existence"); } if (i) { a.evec = psc_read_matrix (f); if (psc_compare_matrices (a.evec, bod->evec) == 0) { ASSERT_TEXT (0, "PSC ERROR: evec"); } ERRMEM (a.eval = malloc (sizeof (double [a.evec->n]))); fread (a.eval, sizeof (double), a.evec->n, f); for (i = 0; i < a.evec->n; i ++) { if (a.eval [i]!= bod->eval [i]) { ASSERT_TEXT (0, "PSC ERROR: eval"); } } psc_matrix_free (a.evec); free (a.eval); } /* XXX: skip bod->label as non-essential */ /* XXX: skip bod->mesh for the moment */ /* XXX: skip bod->energy as non-essential */ /* XXX: skip bod->fracture as non-essential */ fclose (f); }