/* File: round2.c. Round numbers to specified precision. */ #include #include "genlib.h" #include "simpio.h" #include "math.h" double round(double x, int precision) ; double power(double base, double exponent) ; main() { double x ; int places ; while (TRUE) { printf("x? ") ; x = GetReal() ; printf("places? ") ; places = GetInteger() ; if (places < 0) break ; printf("%f rounded to %d places: %g\n", x, places, round(x,places) ) ; } } double round(double x, int precision) { int sign ; double power10, temp_x, result ; if (x < 0) { sign = -1 ; } else { sign = 1 ; } if (precision >= 0) { power10 = power(10.0, precision) ; temp_x = fabs(x) * power10 ; result = sign * floor(temp_x + 0.5) / power10 ; return(result) ; } else { printf("Error: negative precision\n") ; return(x) ; } } double power(double base, double exponent) { return( pow(base, exponent) ) ; }