Функция copysign
Функция copysign возвращает число с абсолютным значением
первого аргумента и знаком второго аргумента. Другими словами,
она берет модуль первого числа и приписывает ему знак от второго
числа. В первый параметр мы передаем число, от которого берется
модуль, а во второй параметр - число, знак которого нужно
скопировать. Функция доступна для типов float,
double и long double и не изменяет исходные значения.
Синтаксис
#include <cmath>
copysign(x, y);
Пример
Давайте применим знак от отрицательного числа -3 к
положительному числу 5:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double res = copysign(5, -3);
cout << res << endl;
return 0;
}
Результат выполнения кода:
-5
Пример
Если оба числа отрицательные, то результат также будет отрицательным, так как знак берется от второго аргумента:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double res = copysign(-5, -2);
cout << res << endl;
return 0;
}
Результат выполнения кода:
-5
Пример
Давайте применим положительный знак к отрицательному числу:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double res = copysign(-5, 3);
cout << res << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Функция copysign также корректно работает с нулем.
Знак нуля в C++ может быть как положительным, так и
отрицательным. Скопируем знак от -0.0:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double res = copysign(0.0, -0.0);
cout << res << endl;
return 0;
}
Результат выполнения кода:
-0