guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

`angle' implementation


From: Martin Grabmueller
Subject: `angle' implementation
Date: Tue, 03 Jul 2001 17:57:46 +0200

This not so important, but is there any reason why `angle' is
implemented like this:

  SCM
  scm_angle (SCM z)
  {
    if (SCM_INUMP (z)) {
      if (SCM_INUM (z) >= 0) {
        return scm_make_real (atan2 (0.0, 1.0));
      } else {
        return scm_make_real (atan2 (0.0, -1.0));
      }
    } else if (SCM_BIGP (z)) {
      if (SCM_BIGSIGN (z)) {
        return scm_make_real (atan2 (0.0, -1.0));
      } else {
        return scm_make_real (atan2 (0.0, 1.0));
      }
    } else if (SCM_REALP (z)) {
      return scm_make_real (atan2 (0.0, SCM_REAL_VALUE (z)));
    } else if (SCM_COMPLEXP (z)) {
      return scm_make_real (atan2 (SCM_COMPLEX_IMAG (z),
                            SCM_COMPLEX_REAL (z)));
    } else {
      SCM_WTA_DISPATCH_1 (g_angle, z, SCM_ARG1, s_angle);
    }
  }

instead of this:

  SCM
  scm_angle (SCM z)
  {
    if (SCM_INUMP (z)) {
      if (SCM_INUM (z) >= 0) {
        return scm_make_real (0.0);
      } else {
        return scm_make_real (M_PI);
      }
    } else if (SCM_BIGP (z)) {
      if (SCM_BIGSIGN (z)) {
        return scm_make_real (M_PI);
      } else {
        return scm_make_real (0.0);
      }
    } else if (SCM_REALP (z)) {
      if (SCM_REAL_VALUE (z) >= 0) {
        return scm_make_real (0.0);
      } else {
        return scm_make_real (M_PI);
      }
    } else if (SCM_COMPLEXP (z)) {
      return scm_make_real (atan2 (SCM_COMPLEX_IMAG (z),
                            SCM_COMPLEX_REAL (z)));
    } else {
      SCM_WTA_DISPATCH_1 (g_angle, z, SCM_ARG1, s_angle);
    }
  }

Regards,
  'martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]