Tôi đã đọc qua How can I write a power function myself? và câu trả lời được đưa ra bởi dan04 hút sự chú ý của tôi chủ yếu là bởi vì tôi không chắc chắn về câu trả lời được đưa ra bởi fortran, nhưng tôi mất đó và thực hiện điều này:tự làm pow() C++
#include <iostream>
using namespace std;
float pow(float base, float ex){
// power of 0
if (ex == 0){
return 1;
// negative exponenet
}else if(ex < 0){
return 1/pow(base, -ex);
// even exponenet
}else if ((int)ex % 2 == 0){
float half_pow = pow(base, ex/2);
return half_pow * half_pow;
//integer exponenet
}else{
return base * pow(base, ex - 1);
}
}
int main(){
for (int ii = 0; ii< 10; ii++){\
cout << "pow(" << ii << ".5) = " << pow(ii, .5) << endl;
cout << "pow(" << ii << ",2) = " << pow(ii, 2) << endl;
cout << "pow(" << ii << ",3) = " << pow(ii, 3) << endl;
}
}
mặc dù tôi không chắc chắn liệu tôi có dịch được quyền này hay không vì tất cả các cuộc gọi đều trả về .5 khi số mũ trả về 0. Trong câu trả lời, nó có thể cần log2 (x) dựa trên a^b = 2^(b * log2(a))
, nhưng tôi không chắc chắn trong khi tôi không chắc chắn nơi để đặt nó, hoặc nếu tôi thậm chí còn suy nghĩ về quyền này.
LƯU Ý: Tôi biết rằng điều này có thể được xác định trong thư viện toán học, nhưng tôi không cần tất cả các chi phí bổ sung của toàn bộ thư viện toán cho một vài chức năng.
EDIT: có ai biết thực hiện dấu phẩy động cho số mũ phân số không? (Tôi đã thấy một triển khai kép, nhưng đó là sử dụng một thủ thuật với thanh ghi, và tôi cần dấu phẩy động, và thêm một thư viện chỉ để làm một thủ thuật tôi sẽ tốt hơn là chỉ cần bao gồm thư viện toán học)
Hoặc các chi phí gia tăng của một FPU? –
bạn thiếu số mũ phân số (mã có số mũ bằng nhau) - nhìn vào liên kết gốc, tôi nghĩ bạn đang sao chép từ thứ chỉ hỗ trợ số nguyên nguyên (do đó kiểm tra phân số sẽ thất bại). –
@andrewcooke dang nó. bạn có thể giúp tôi bằng cách hiển thị những thay đổi cần thiết – gardian06