copysign() (trong <cmath> hoặc <math.h>) tạo giá trị mới có độ lớn (magnitude) của đối số đầu và dấu (sign) của đối số thứ hai.
Cú pháp
double copysign(double x, double y); float copysignf(float x, float y); long double copysignl(long double x, long double y);
Ví dụ
copysign(4, -5)→ -4 (magnitude 4, sign -)copysign(-1.3, 4.4)→ 1.3 (magnitude 1.3, sign +)copysign(0.0, -1.0)→ -0.0 (dấu âm)
Chương trình mẫu
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << "copysign(-1.1, 2.3) = " << copysign(-1.1, 2.3) << endl;
cout << "copysign(5.0, -2.0) = " << copysign(5.0, -2.0) << endl;
cout << "copysign(-0.0, -1.0) = " << copysign(-0.0, -1.0) << endl;
return 0;
}
Kết quả
copysign(-1.1, 2.3) = 1.1 copysign(5.0, -2.0) = -5 copysign(-0.0, -1.0) = -0
Ứng dụng: Giữ dấu khi tính toán, xử lý -0.0, implement hàm signum, xử lý NaN (copysign bảo toàn payload NaN).
Lưu ý: Khác với abs() (luôn dương), copysign cho phép kết quả âm.