Tính căn bậc 3 với độ chinh xác 0.001 bằng phương pháp chia đôi

toàn dốt nát :V hoặc ko đọc sách mình viết

2 Likes

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 :rofl::rofl::rofl::rofl::rofl:

4 Likes

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";
}
2 Likes

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

2 Likes

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

3 Likes

Screenshot%20(10)
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

4 Likes

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>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

4 Likes

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 =]

2 Likes

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

C++ Primer 5th edition đây

đương nhiên nếu em ko thích theo C++ thì học cho qua môn cũng được :V

3 Likes

Nhân vào để xác định khoảng của x.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?