std::sqrt
решает эту проблему:
#include <cmath>
auto foo(int circleRadius, int y) {
float x_f = circleRadius - std::sqrt((float)(circleRadius * circleRadius - y * y));
}
компилирует для msv c и g cc в соответствии с https://godbolt.org/z/g9MJH6
Вы должны предпочитают std::sqrt
sqrtf
в C ++. Он работает с большим количеством типов, то есть вы можете написать свою функцию более обобщенно. Также не используются венгерские обозначения.
Редактировать: Если вам все равно, возвращает ли вычисление число с плавающей запятой или двойное число, вы можете опустить приведение и написать следующее:
auto x_f = circleRadius - std::sqrt(circleRadius * circleRadius - y * y);
Если вы заботитесь о том, чтобы использовалось число с плавающей запятой , вместо этого вы можете использовать std::sqrtf
. Если вам нужно использовать приведение, вы обычно предпочитаете приведение в стиле от static_cast
до C. Причины этого перечислены здесь .