The real part is calculated using a Kramers-Kronig transformation of the imaginary part. If the imaginary part doesn't extend over a broad enough energy range, it can affect the accuracy of the transformation. Try expanding the energy range or increasing the number of k-points to see if this improves the real part.
Convergence Parameters in SCF Calculation: Even though you’re using norm-conserving pseudopotentials, it’s important to ensure that parameters like k-point density, energy cutoff, and smearing (for metals) are well-converged. Small inaccuracies in the SCF calculation can have a larger effect on the real part of the dielectric function.
You can follow the code of my papers given below to calculate the optical properties:
Article Exploring the impact of strain on the electronic and optical...
Article Analysis of the role of A-cations in lead-free A3SbI3 (A = B...
Article Exploring new lead-free halide perovskites RbSnM3 (M = I, Br...
The SCF code is different for calculating optical properties. Try to use the code in the data files at the end of these papers.
And try to optimize the SCF file with proper k-point and cut-off energy