Listing 2

#include <stdio.h>
#include <setjmp.h>

main()
{

   double value, result;
   jmp_buf context;
   double mysqrt(double value, jmp_buf context);

   while (1) {
      if (setjmp(context) != 0)
         printf("Value is out of the domain for sqrt\n");

      printf("Enter fp value: ");
      scanf("#lf", &value);
      if (value == -1.0)
         return;
      result = mysqrt(value, context);
      printf("sqrt(%f) = %f\n", value, result);
   }
}

#include <errno.h>
#include <math.h>

double mysqrt(double value, jmp_buf context)
{
   double d;

   errno = 0;
   d = sqrt(value);
   if (errno == EDOM)
      longjmp(context, 1);
   else
      return (d);
}

Enter fp value: 1.234
sqrt(1.234000) = 1.110856
Enter fp value: 12345
sqrt(12345.000000) = 111.108056
Enter fp value: -0.000000
sqrt(-0.000000) = -0.000000
Enter fp value: -0.0000001
Value is out of the domain for sqrt
Enter fp value: -5
Value is out of the domain for sqrt