diff -b ./tkBargraph.c new/tkBargraph.c
115,116c115,116
<     int value;			/* Current value of Bargraph. */
<     int base_value;             /* Value that is the root of the bar */
---
>     double value;		/* Current value of Bargraph. */
>     double base_value;          /* Value that is the root of the bar */
120c120
<     int max_value;		/* Value corresponding to right or top of
---
>     double max_value;		/* Value corresponding to right or top of
122c122
<     int min_value;		/* Value corresponding to left or bottom
---
>     double min_value;		/* Value corresponding to left or bottom
280c280
<     {TK_CONFIG_INT, "-base", "base", "Base",
---
>     {TK_CONFIG_DOUBLE, "-base", "base", "Base",
304c304
<     {TK_CONFIG_INT, "-max", "max", "Max",
---
>     {TK_CONFIG_DOUBLE, "-max", "max", "Max",
306c306
<     {TK_CONFIG_INT, "-min", "min", "Min",
---
>     {TK_CONFIG_DOUBLE, "-min", "min", "Min",
346c346
< static int      BarHeight _ANSI_ARGS_((Bargraph *BargraphPtr, int value));
---
> static int      BarHeight _ANSI_ARGS_((Bargraph *BargraphPtr, double value));
356c356
< 		    int value, int bottom));
---
> 		    double value, double bottom));
360c360
< 		    int value, int rightEdge));
---
> 		    double value, double rightEdge));
370,373c370,371
< 		    int value));
< static int	ValueToPixel _ANSI_ARGS_((Bargraph *BargraphPtr, int value));
< static void     SetBargraphValue _ANSI_ARGS_((Bargraph *BargraphPtr,
< 					      int value));
---
> 		    double value));
> static int	ValueToPixel _ANSI_ARGS_((Bargraph *BargraphPtr, double value));
525c523
< 	sprintf(interp->result, "%d", BargraphPtr->value);
---
> 	sprintf(interp->result, "%g", BargraphPtr->value);
527c525
< 	int value;
---
> 	double value;
534c532
< 	if (Tcl_GetInt(interp, argv[2], &value) != TCL_OK) {
---
> 	if (Tcl_GetDouble(interp, argv[2], &value) != TCL_OK) {
812,815c810,813
<   int minv = BargraphPtr->min_value;
<   int maxv = BargraphPtr->max_value;
<   int real_max, real_min;
<   int basev;
---
>   double minv = BargraphPtr->min_value;
>   double maxv = BargraphPtr->max_value;
>   double real_max, real_min;
>   double basev;
835c833
<     sprintf(valueString, "%d", BargraphPtr->min_value);
---
>     sprintf(valueString, "%g", BargraphPtr->min_value);
839c837
<     sprintf(valueString, "%d", BargraphPtr->max_value);
---
>     sprintf(valueString, "%g", BargraphPtr->max_value);
904c902
<                               ( (float)(basev - minv) / (float)(maxv - minv) );
---
>                               ( (basev - minv) / (maxv - minv) );
929c927
<       sprintf(valueString, "%d", BargraphPtr->min_value);
---
>       sprintf(valueString, "%g", BargraphPtr->min_value);
934c932
<       sprintf(valueString, "%d", BargraphPtr->max_value);
---
>       sprintf(valueString, "%g", BargraphPtr->max_value);
967,968c965,966
< 	                      ( 1.0 - (float)(basev - minv) /
< 			              (float)(maxv - minv) );
---
> 	                      ( 1.0 - (basev - minv) /
> 			              (maxv - minv) );
998c996
<   int value = BargraphPtr->value;
---
>   double value = BargraphPtr->value;
1000,1002c998,1000
<   int minv = BargraphPtr->min_value;
<   int maxv = BargraphPtr->max_value;
<   int basev = BargraphPtr->base_value;
---
>   double minv = BargraphPtr->min_value;
>   double maxv = BargraphPtr->max_value;
>   double basev = BargraphPtr->base_value;
1055c1053
<     sprintf( valueString, "%d", value );
---
>     sprintf( valueString, "%g", value );
1130c1128
<     sprintf( valueString, "%d", maxv );
---
>     sprintf( valueString, "%g", maxv );
1139c1137
<     sprintf( valueString, "%d", minv );
---
>     sprintf( valueString, "%g", minv );
1155c1153
<       sprintf( valueString, "%d", basev );
---
>       sprintf( valueString, "%g", basev );
1279c1277
<   int value = BargraphPtr->value;
---
>   double value = BargraphPtr->value;
1281,1283c1279,1281
<   int minv = BargraphPtr->min_value;
<   int maxv = BargraphPtr->max_value;
<   int basev = BargraphPtr->base_value;
---
>   double minv = BargraphPtr->min_value;
>   double maxv = BargraphPtr->max_value;
>   double basev = BargraphPtr->base_value;
1337c1335
<     sprintf( valueString, "%d", value );
---
>     sprintf( valueString, "%g", value );
1415c1413
<     sprintf( valueString, "%d", maxv );
---
>     sprintf( valueString, "%g", maxv );
1427c1425
<     sprintf( valueString, "%d", minv );
---
>     sprintf( valueString, "%g", minv );
1443c1441
<       sprintf( valueString, "%d", basev );
---
>       sprintf( valueString, "%g", basev );
1566c1564
<      int value;
---
>      double value;
1568,1570c1566,1568
<   int basev = BargraphPtr->base_value;
<   int minv = min( BargraphPtr->min_value, BargraphPtr->max_value );
<   int maxv = max( BargraphPtr->min_value, BargraphPtr->max_value );
---
>   double basev = BargraphPtr->base_value;
>   double minv = min( BargraphPtr->min_value, BargraphPtr->max_value );
>   double maxv = max( BargraphPtr->min_value, BargraphPtr->max_value );
1577c1575
<              ( (float)abs( value - basev ) / (float)( maxv - minv ) );
---
>              ( fabs(( value - basev ) / ( maxv - minv )) );
1608c1606
<     int value;				/* Reading of the widget.    */
---
>     double value;			/* Reading of the widget.    */
1611c1609
<   int basev = BargraphPtr->base_value;
---
>   double basev = BargraphPtr->base_value;
1692c1690
<     int value;			/* New value for Bargraph.  Gets
---
>     double value;		/* New value for Bargraph.  Gets
diff -b ./tkDial.c new/tkDial.c
112,113c112,113
< #define  norm(w, v)              (((float)v - (float)w->min_value) /      \
<                                  ((float)w->max_value - (float)w->min_value))
---
> #define  norm(w, v)              ((v) - (w->min_value)) /      \
>                                  ((w->max_value) - (w->min_value))
152,155c152,155
<     int min_value;                  /* minimum dial value            */
<     int max_value;                  /* maximum dial value            */
<     int value;                      /* dial value                    */
<     int oldvalue;                   /* previous dial value           */
---
>     double min_value;               /* minimum dial value            */
>     double max_value;               /* maximum dial value            */
>     double value;                   /* dial value                    */
>     double oldvalue;                /* previous dial value           */
344c344
<     {TK_CONFIG_INT, "-maxvalue", "maxvalue", "Maxvalue",
---
>     {TK_CONFIG_DOUBLE, "-maxvalue", "maxvalue", "Maxvalue",
352c352
<     {TK_CONFIG_INT, "-minvalue", "minvalue", "Minvalue",
---
>     {TK_CONFIG_DOUBLE, "-minvalue", "minvalue", "Minvalue",
439c439
< static void             SetDialValue _ANSI_ARGS_((Dial *DialPtr, int value));
---
> static void             SetDialValue _ANSI_ARGS_((Dial *DialPtr, double value));
602c602
<         sprintf(interp->result, "%d", DialPtr->value);
---
>         sprintf(interp->result, "%g", DialPtr->value);
604c604
<         int value;
---
>         double value;
611c611
<         if (Tcl_GetInt(interp, argv[2], &value) != TCL_OK) {
---
>         if (Tcl_GetDouble(interp, argv[2], &value) != TCL_OK) {
1061c1061
<       sprintf( valueString, "%d", DialPtr->value );
---
>       sprintf( valueString, "%g", DialPtr->value );
1121,1122c1121,1122
<   int max_val = DialPtr->max_value, min_val = DialPtr->min_value;
<   int value = DialPtr->value;
---
>   double max_val = DialPtr->max_value, min_val = DialPtr->min_value;
>   double value = DialPtr->value;
1131c1131
<  *  value between the conatraints.  The textual value, if it is showing
---
>  *  value between the constraints.  The textual value, if it is showing
1372c1372
<     int val;                    /* New value for Dial */
---
>     double val;                 /* New value for Dial */
1374,1376c1374,1376
<     int old_val = DialPtr->value;
<     int min_val = DialPtr->min_value;
<     int max_val = DialPtr->max_value;
---
>     double old_val = DialPtr->value;
>     double min_val = DialPtr->min_value;
>     double max_val = DialPtr->max_value;
