2798 |
return (sgn < 0) ? x : y; |
return (sgn < 0) ? x : y; |
2799 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2800 |
double z = xx; |
double z = xx; |
2801 |
return (z <= SCM_REAL_VALUE (y)) ? y : scm_make_real (z); |
/* if y==NaN then ">" is false and we return NaN */ |
2802 |
|
return (z > SCM_REAL_VALUE (y)) ? scm_make_real (z) : y; |
2803 |
} else { |
} else { |
2804 |
SCM_WTA_DISPATCH_2 (g_max, x, y, SCM_ARGn, s_max); |
SCM_WTA_DISPATCH_2 (g_max, x, y, SCM_ARGn, s_max); |
2805 |
} |
} |
2813 |
scm_remember_upto_here_2 (x, y); |
scm_remember_upto_here_2 (x, y); |
2814 |
return (cmp > 0) ? x : y; |
return (cmp > 0) ? x : y; |
2815 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2816 |
int cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (x), SCM_REAL_VALUE (y)); |
double yy = SCM_REAL_VALUE (y); |
2817 |
|
int cmp; |
2818 |
|
if (xisnan (yy)) |
2819 |
|
return y; |
2820 |
|
cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (x), yy); |
2821 |
scm_remember_upto_here_1 (x); |
scm_remember_upto_here_1 (x); |
2822 |
return (cmp > 0) ? x : y; |
return (cmp > 0) ? x : y; |
2823 |
} else { |
} else { |
2826 |
} else if (SCM_REALP (x)) { |
} else if (SCM_REALP (x)) { |
2827 |
if (SCM_INUMP (y)) { |
if (SCM_INUMP (y)) { |
2828 |
double z = SCM_INUM (y); |
double z = SCM_INUM (y); |
2829 |
|
/* if x==NaN then "<" is false and we return NaN */ |
2830 |
return (SCM_REAL_VALUE (x) < z) ? scm_make_real (z) : x; |
return (SCM_REAL_VALUE (x) < z) ? scm_make_real (z) : x; |
2831 |
} else if (SCM_BIGP (y)) { |
} else if (SCM_BIGP (y)) { |
2832 |
int cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (y), SCM_REAL_VALUE (x)); |
double xx = SCM_REAL_VALUE (x); |
2833 |
|
int cmp; |
2834 |
|
if (xisnan (xx)) |
2835 |
|
return x; |
2836 |
|
cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (y), xx); |
2837 |
scm_remember_upto_here_1 (y); |
scm_remember_upto_here_1 (y); |
2838 |
return (cmp < 0) ? x : y; |
return (cmp < 0) ? x : y; |
2839 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2840 |
return (SCM_REAL_VALUE (x) < SCM_REAL_VALUE (y)) ? y : x; |
/* if x==NaN then our explicit check means we return NaN |
2841 |
|
if y==NaN then ">" is false and we return NaN |
2842 |
|
calling isnan is unavoidable, since it's the only way to know |
2843 |
|
which of x or y causes any compares to be false */ |
2844 |
|
double xx = SCM_REAL_VALUE (x); |
2845 |
|
return (xisnan (xx) || xx > SCM_REAL_VALUE (y)) ? x : y; |
2846 |
} else { |
} else { |
2847 |
SCM_WTA_DISPATCH_2 (g_max, x, y, SCM_ARGn, s_max); |
SCM_WTA_DISPATCH_2 (g_max, x, y, SCM_ARGn, s_max); |
2848 |
} |
} |
2879 |
return (sgn < 0) ? y : x; |
return (sgn < 0) ? y : x; |
2880 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2881 |
double z = xx; |
double z = xx; |
2882 |
|
/* if y==NaN then "<" is false and we return NaN */ |
2883 |
return (z < SCM_REAL_VALUE (y)) ? scm_make_real (z) : y; |
return (z < SCM_REAL_VALUE (y)) ? scm_make_real (z) : y; |
2884 |
} else { |
} else { |
2885 |
SCM_WTA_DISPATCH_2 (g_min, x, y, SCM_ARGn, s_min); |
SCM_WTA_DISPATCH_2 (g_min, x, y, SCM_ARGn, s_min); |
2894 |
scm_remember_upto_here_2 (x, y); |
scm_remember_upto_here_2 (x, y); |
2895 |
return (cmp > 0) ? y : x; |
return (cmp > 0) ? y : x; |
2896 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2897 |
int cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (x), SCM_REAL_VALUE (y)); |
double yy = SCM_REAL_VALUE (y); |
2898 |
|
int cmp; |
2899 |
|
if (xisnan (yy)) |
2900 |
|
return y; |
2901 |
|
cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (x), yy); |
2902 |
scm_remember_upto_here_1 (x); |
scm_remember_upto_here_1 (x); |
2903 |
return (cmp > 0) ? y : x; |
return (cmp > 0) ? y : x; |
2904 |
} else { |
} else { |
2907 |
} else if (SCM_REALP (x)) { |
} else if (SCM_REALP (x)) { |
2908 |
if (SCM_INUMP (y)) { |
if (SCM_INUMP (y)) { |
2909 |
double z = SCM_INUM (y); |
double z = SCM_INUM (y); |
2910 |
return (SCM_REAL_VALUE (x) <= z) ? x : scm_make_real (z); |
/* if x==NaN then "<" is false and we return NaN */ |
2911 |
|
return (z < SCM_REAL_VALUE (x)) ? scm_make_real (z) : x; |
2912 |
} else if (SCM_BIGP (y)) { |
} else if (SCM_BIGP (y)) { |
2913 |
int cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (y), SCM_REAL_VALUE (x)); |
double xx = SCM_REAL_VALUE (x); |
2914 |
|
int cmp; |
2915 |
|
if (xisnan (xx)) |
2916 |
|
return x; |
2917 |
|
cmp = xmpz_cmp_d (SCM_I_BIG_MPZ (y), xx); |
2918 |
scm_remember_upto_here_1 (y); |
scm_remember_upto_here_1 (y); |
2919 |
return (cmp < 0) ? y : x; |
return (cmp < 0) ? y : x; |
2920 |
} else if (SCM_REALP (y)) { |
} else if (SCM_REALP (y)) { |
2921 |
return (SCM_REAL_VALUE (x) < SCM_REAL_VALUE (y)) ? x : y; |
/* if x==NaN then our explicit check means we return NaN |
2922 |
|
if y==NaN then "<" is false and we return NaN |
2923 |
|
calling isnan is unavoidable, since it's the only way to know |
2924 |
|
which of x or y causes any compares to be false */ |
2925 |
|
double xx = SCM_REAL_VALUE (x); |
2926 |
|
return (xisnan (xx) || xx < SCM_REAL_VALUE (y)) ? x : y; |
2927 |
} else { |
} else { |
2928 |
SCM_WTA_DISPATCH_2 (g_min, x, y, SCM_ARGn, s_min); |
SCM_WTA_DISPATCH_2 (g_min, x, y, SCM_ARGn, s_min); |
2929 |
} |
} |