toàn dốt nát :V hoặc ko đọc sách mình viết
Tính căn bậc 3 với độ chinh xác 0.001 bằng phương pháp chia đôi
chỉ là để lại chút lỗi cho sinh viên soi thôi mà, ai soi ra được thì mới gọi là nắm chắc kiến thức, không phải học vẹt. Có gì mà căng
viết lại đáp án cho em :V
#include <iostream>
double cubicDiff(double x, double n) {
return x * x * x - n;
}
double cubicRoot(double n, double epsilon) {
if (n < 0) return -cubicRoot(-n, epsilon);
if (n == 0) return 0;
if (n == 1) return 1;
double xL = 0;
double xR = n < 1 ? 1 : n;
while (xR - xL > epsilon) {
double xM = (xL + xR) / 2;
if (cubicDiff(xM, n) < 0)
xL = xM;
else
xR = xM;
}
return (xL + xR) / 2;
}
int main() {
double n;
std::cin >> n;
std::cout << cubicRoot(n, 0.001) << "\n";
}
cảm ơn anh nhé, mà anh học trường nào v
may mắn là anh ko học trường ở VN
thời đại internet đầy đường rồi ba cái bậy bạ main return 1 “không sao” thì đúng là bó tay
ghê dữ, anh học ở đâu thế
học đâu kệ anh liên quan gì tới cuốn sách rác rưởi kia :V
không chính xác đến 0.001 được
2 - 1.99951 < 0.001 là chính xác tới 0.001 rồi @_@
có phải hỏi chính xác tới 3 chữ số sau dấu phẩy đâu :V
thật ra xét xR - xL < 2 * epsilon là được
không phải, chính xác đến 0.001 là làm tròn đến 3 chữ số thập phân, ví dụ ra kết quả 1.999 hay 2.001 mới được
vậy em thêm <iomanip>
và std::cout << std::fixed << std::setprecision(3) << cubicRoot(n, 0.001) << "\n"
“chính xác tới 0.001” là tương đối thôi, căn bậc ba của 1e-18 có ra nổi 1e-6 đâu :V
ok a, nếu số nhỏ quá thì nó ra 0 thôi, tương đương 0.000
em cứ cho cái epsilon kia xuống 1e-4 cũng được, ăn gian cho nó chính xác hơn =]
cảm ơn anh nhiều nha, deadline gồm cả chục bài mà còn mỗi bài này, cuối cùng cũng đã ra
em đọc cuốn kia cẩn thận :V :V Ráng mua 1 cuốn tiếng Anh mà đọc :V
đương nhiên nếu em ko thích theo C++ thì học cho qua môn cũng được :V
Nhân vào để xác định khoảng của x.