diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c
index 4e927d8..afcfa8c 100644
--- a/src/backend/utils/adt/float.c
+++ b/src/backend/utils/adt/float.c
@@ -1530,7 +1530,7 @@ dacos(PG_FUNCTION_ARGS)
 	 */
 	errno = 0;
 	result = acos(arg1);
-	if (errno != 0)
+	if (errno != 0 || isnan(result))
 		ereport(ERROR,
 				(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
 				 errmsg("input is out of range")));
@@ -1551,7 +1551,7 @@ dasin(PG_FUNCTION_ARGS)
 
 	errno = 0;
 	result = asin(arg1);
-	if (errno != 0)
+	if (errno != 0 || isnan(result))
 		ereport(ERROR,
 				(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
 				 errmsg("input is out of range")));
diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out
index 6221538..49687fc 100644
--- a/src/test/regress/expected/float8.out
+++ b/src/test/regress/expected/float8.out
@@ -351,6 +351,23 @@ SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
        | 1.2345678901234e-200 | 1.23456789012339e-200
 (3 rows)
 
+-- trigonometry
+SELECT asin(0);
+ asin 
+------
+    0
+(1 row)
+
+SELECT asin(2);
+ERROR:  input is out of range
+SELECT acos(0);
+      acos       
+-----------------
+ 1.5707963267949
+(1 row)
+
+SELECT acos(2);
+ERROR:  input is out of range
 -- cube root
 SELECT ||/ float8 '27' AS three;
  three 
diff --git a/src/test/regress/sql/float8.sql b/src/test/regress/sql/float8.sql
index 92a574a..fd1e43f 100644
--- a/src/test/regress/sql/float8.sql
+++ b/src/test/regress/sql/float8.sql
@@ -114,6 +114,12 @@ SELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1
    FROM FLOAT8_TBL f
    WHERE f.f1 > '0.0';
 
+-- trigonometry
+SELECT asin(0);
+SELECT asin(2);
+SELECT acos(0);
+SELECT acos(2);
+
 -- cube root
 SELECT ||/ float8 '27' AS three;
 
