Font sizes should never go under 16px. It will make life harder for older ones and people with eye problems.
You don't need to use those complicated calculations. Instead, you can use min(), max() or clamp()
Beware: These functions are relatively new (especially clamp()). Check this link out to see browser support.
min() Lets you to choose minimum and recommended font-size:
min(18px, 2vw) /* It will use minimum of those two */
max() chooses between two values and uses bigger one:
max(18px, 2vw) /* If 2wv becomes smaller than 18px, it will not use it */
clamp() Is combination of those two. You can choose minimum, regular and maximum font value:
clamp(18px, 2vw, 50px) /* If 2wv becomes smaller than 18px, it will not use it. If 2vw gets bigger than 50px, it will stay at 50px */
Learn more:
min(), max() and clamp (Excellent youtube video)