diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index 5910ee5751221dd3cfa8c7a6da7b4f7f987d2a16..82ef966ba7ac2bb631d769209b18c1e27167082d 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -577,8 +577,8 @@ asn_REAL2double(const REAL_t *st, double *dbl_value) {
 	double m;
 	int expval;		/* exponent value */
 	unsigned int elen;	/* exponent value length, in octets */
-	unsigned int scaleF;
-	unsigned int baseF;
+	int scaleF;
+	int baseF;
 	uint8_t *ptr;
 	uint8_t *end;
 	int sign;
@@ -754,8 +754,8 @@ asn_double2REAL(REAL_t *st, double dbl_value) {
 	/* This loop ensures DER conformance by forcing mantissa odd: 11.3.1 */
 	mval = *mstop;
 	if(mval && !(mval & 1)) {
-		unsigned int shift_count = 1;
-		unsigned int ishift;
+		int shift_count = 1;
+		int ishift;
 		uint8_t *mptr;
 
 		/*
diff --git a/tests/tests-skeletons/check-REAL.c b/tests/tests-skeletons/check-REAL.c
index 9e32c40aa96b1fb7cbbe2c100a3a826bdceb5df4..c7b8112521c365a80560d042bb4a48af0589f58a 100644
--- a/tests/tests-skeletons/check-REAL.c
+++ b/tests/tests-skeletons/check-REAL.c
@@ -345,8 +345,6 @@ check_ber_857_encoding(int base, int sign, int scaling_factor, int exponent, int
 
 static void
 check_ber_encoding() {
-	static const double zero = 0.0;
-
 #define CHECK_BER_STRICT(v, nocan, can, inbuf, outbuf)			\
 	check_ber_buffer_twoway(v, nocan, can, inbuf, sizeof(inbuf),	\
 				outbuf, sizeof(outbuf), __LINE__)
@@ -382,9 +380,9 @@ check_ber_encoding() {
 	{ uint8_t b_pinf[] = { 0x40 };
 	  uint8_t b_minf[] = { 0x41 };
 	  uint8_t b_nan[]  = { 0x42 };
-	  CHECK_BER_STRICT(1.0/zero, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>", b_pinf, b_pinf);
-	  CHECK_BER_STRICT(-1.0/zero, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>", b_minf, b_minf);
-	  CHECK_BER_STRICT(zero/zero, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>", b_nan, b_nan); }
+	  CHECK_BER_STRICT(INFINITY, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>", b_pinf, b_pinf);
+	  CHECK_BER_STRICT(-INFINITY, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>", b_minf, b_minf);
+	  CHECK_BER_STRICT(NAN, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>", b_nan, b_nan); }
 
 	/* 8.5.6 b) => 8.5.8 Decimal encoding is used; NR1 form */
 	{ uint8_t b_0_nr1[] = { 0x01, '0' };
@@ -618,16 +616,15 @@ check_ber_encoding() {
 int
 main() {
 	REAL_t rn;
-	static const double zero = 0.0;
 	memset(&rn, 0, sizeof(rn));
 
 	check_ber_encoding();
 
 	check(&rn, 0.0, "0", "0");
 	check(&rn, -0.0, "-0", "-0");	/* minus-zero */
-	check(&rn, zero/zero, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>");
-	check(&rn, 1.0/zero, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>");
-	check(&rn, -1.0/zero, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>");
+	check(&rn, NAN, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>");
+	check(&rn, INFINITY, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>");
+	check(&rn, -INFINITY, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>");
 	check(&rn, 1.0, "1.0", "1.0E0");
 	check(&rn, -1.0, "-1.0", "-1.0E0");
 	check(&rn, 0.1, "0.1", "1.0E-1");