diff --git a/src/mo_expression.F90 b/src/mo_expression.F90
index 17d9be34840d74c033a7f1907c67deff5db3e2dd..4bcdf7333a6d1100b7d808cf12ead9e31814e2b4 100644
--- a/src/mo_expression.F90
+++ b/src/mo_expression.F90
@@ -442,7 +442,7 @@ CONTAINS
       SELECT CASE (cqueue%list(i)%etype)
       CASE (VALUE)
         ALLOCATE (op_value)
-        op_value%val = REAL(cqueue%list(i)%val)
+        op_value%val = REAL(cqueue%list(i)%val, KIND=real_kind)
         expr_list%list(i)%p => op_value
       CASE (VARIABLE)
         ALLOCATE (op_variable)
diff --git a/test/fortran/test_expression.f90 b/test/fortran/test_expression.f90
index cda64a857b88b75313c01d2a95b0bf1b641145c4..4920693ef7363ac8500a845b1b4570ca8202944a 100644
--- a/test/fortran/test_expression.f90
+++ b/test/fortran/test_expression.f90
@@ -50,7 +50,7 @@ CONTAINS
 
     CALL TAG_TEST("TEST_exp_erf")
     formula = expression("exp(1.) + erf(0.76)")
-    ref = EXP(1.) + ERF(0.76)
+    ref = EXP(1._wp) + ERF(0.76_wp)
     CALL formula%evaluate(ptr_val)
     CALL ASSERT_ALMOST_EQUAL(val, ref)