Xin các cao thủ làm ơn chỉ giùm: Trong C hàm nào có thể tính căn bậc 3 trở đi của một số và cú pháp như thế nào, hoặc là luỹ thừa của một số hữu tỉ (ví dụ: 12 luỹ thừa 1/23). Tôi có biết một hàm là POW(A,B) nhưng tham số A có thể biểu diễn dưới dạng một biến nhưng B thì không, nó bắt buộc phải là một hằng số và hằng số đó là số nguyên, không thể biểu diễn với số hữu tỉ (ví dụ POW(26,1/3) là không được nó báo lỗi, nhưng POW(26,0.3333333) thì được. Tôi đã thử như thế này cũng không được - (float g=1/3, pow(26,g) - hoặc pow(thamso,g)) đều không được. Ai biết làm ơn chỉ giùm. Tôi chờ sự giúp đỡ của các bạn.
Trong Nhon
Hồi âm:
Toi khong co hoc C, nhung ben C++, cach giai quyet cho can bac 3 la bien "mau" hoac "tu" tro thanh float hoac double bang cach them decimal point phia sau con so. Chang han nhu 1/3 thi chuyen thanh 1./3 hoac 1/3. Tu nhien ham pow se su dung duoc pow ( n, 1./3)
Ban thu trong C xem co duoc khong nha.
Andrie Phan
Bạn Trong Nhon thân mến,
Trong C hay C++ không có hàm tính lũy thừa với số mũ thực hay hữu tỉ. Tuy nhiên vẫn có cách tính hàm này rất dễ dàng bằng cách sử dụng hàm log() và exp() và một ít kiến thức toán học. Theo toán học log(x^y) = y*log(x) {x,y là số thực dương} <=> exp (log(x^y)) = exp(y*log(x)) <=> x^y = exp (y*log(x)). Vậy bạn có thể tính lũy thừa của số dương với số mũ dương bất kỳ, kể cả hữu tỉ, có thể tính căn bậc tùy ý. canbacN(x) = exp(log(x) / N). Chúc thành công. Có gì thắc mắc cứ việc liên hệ jokeman1999@yahoo.com
NDT
1/3 la toan integer va se bang 0. Ban hay thu
float g = 1.0/3;
double x = pow(26,g);
Than men.
Nguyen Hung
Bạn Trong Nhon mến:
Đọc qua email của bạn, Kevin có viết một program nhỏ để tính luỹ thừa của một số hữu tỉ cho bạn tham khảo và kèm theo một số function prototypes của C và C++. Kevin đã chạy thử nó và có kèm theo kết quả bên dưới. Nếu vì một lý do gì đó mà phần mền của bạn không compile được function pow(), bạn thử sử dụng công thức này để tự viết cho mình một function tính lũy thừa nhé mà không phải dùng pow().
e^(ln(x^(a/b)) => e^((a/b)ln(x))
Nếu có giúp gì được thêm bạn có thể reply lại cho Kevin. Bạn có thể vào (http://www.hungtan.us/) và vào phần Study để tham khảo thêm về C & C++ hoặc một số ngôn ngữ lập trình khác.
Chúc may mắn,
/*
double pow(double x, double y);
float pow(float x, float y); [C++ only]
long double pow(long double x, long double y); [C++
only]
double pow(double x, int y); [C++ only]
float pow(float x, int y); [C++ only]
long double pow(long double x, int y); [C++ only]
*/
#include
#include
void testDrive();
int main(){
double base, exp, result;
base = 12.0;
exp = (1.0/23.0);
result = pow(base, exp);
printf("pow(%f, %f) = %f\n", base, exp, result);
testDrive();
return 0;
}
void testDrive(){
double base, exp, result;
char quit = 'n';
while( quit != 'y' ){
printf("Enter base: ");
scanf("%le", &base);
printf("Enter exponent: ");
scanf("%le", &exp);
result = pow(base, exp);
printf("pow(%f, %f) = %f\n", base, exp, result);
printf("quit (y/n): ");
scanf(" %c", &quit);
}
}
/*
pow(12.000000, 0.043478) = 1.114092
Enter base: 36
Enter exponent: .5
pow(36.000000, 0.500000) = 6.000000
quit (y/n): n
Enter base: 81
Enter exponent: .2
pow(81.000000, 0.200000) = 2.408225
quit (y/n): n
Enter base: 81
Enter exponent: .25
pow(81.000000, 0.250000) = 3.000000
quit (y/n): n
Enter base: 1024
Enter exponent: .1
pow(1024.000000, 0.100000) = 2.000000
quit (y/n): y
*/
Kevin Truong
ban co the viet nhu sau:
#include
#include
void main( void )
{
double x = 2.0, y = 3.0, z;
z = pow( x, y );
printf( "%.1f to the power of %.1f is %.1f\n", x, y, z );
}
Le Hong Lam