diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index fb94e8a8be10c9e13cf2670bee6c774e8ea87d35..7a3b48ecc0b9fcc572bc87c2368b321304853df4 100644
--- a/libraries/base/common/src/vhdl/common_pkg.vhd
+++ b/libraries/base/common/src/vhdl/common_pkg.vhd
@@ -210,6 +210,8 @@ PACKAGE common_pkg IS
   FUNCTION unpack_complex_im(data : INTEGER;          w : NATURAL) RETURN INTEGER;  -- pack order: im & re
   FUNCTION unpack_complex_im(data : STD_LOGIC_VECTOR; w : NATURAL) RETURN INTEGER;  -- pack order: im & re
 
+  FUNCTION atan2(Y, X: REAL) RETURN REAL;  -- = ARCTAN(Y, X) but returns 0 when Y = X = 0, without reporting Error: ARCTAN(0.0, 0.0) is undetermined
+
   FUNCTION to_natural_arr(n : t_integer_arr; to_zero : BOOLEAN) RETURN t_natural_arr;  -- if to_zero=TRUE then negative numbers are forced to zero, otherwise they will give a compile range error
   FUNCTION to_natural_arr(n : t_nat_natural_arr)                RETURN t_natural_arr;
   FUNCTION to_integer_arr(n : t_natural_arr)                    RETURN t_integer_arr;
@@ -756,6 +758,14 @@ PACKAGE BODY common_pkg IS
     RETURN TO_SINT(c_complex_slv(c_complex_w-1 DOWNTO w));  -- Im in MS part
   END;
 
+  FUNCTION atan2(Y, X: REAL) RETURN REAL IS
+  BEGIN
+    IF Y = 0.0 AND X = 0.0 THEN
+      RETURN 0.0;
+    ELSE
+      RETURN ARCTAN(Y, X);
+    END IF;
+  END;
 
   FUNCTION to_natural_arr(n : t_integer_arr; to_zero : BOOLEAN) RETURN t_natural_arr IS
     VARIABLE vN : t_integer_arr(n'LENGTH-1 DOWNTO 0);