Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

boost::numeric::interval constructor seems not creating an interval enclosing its arguments

Đang mở
#43 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
cpp
Lĩnh vực
data

Hướng nghiên cứu

Bắt đầu bằng cách tái hiện các ví dụ với boost/numeric/interval.hpp, Boost 1.85.0 và -frounding-math, sau đó so sánh hành vi của constructor và += với tài liệu về interval. Xác định xem các cận quan sát được có khớp với các bảo đảm về làm tròn được ghi trong tài liệu hay không, đồng thời xác định các test hiện có nào bao phủ những trường hợp này. Được xem là hoàn tất khi hành vi đã được giải thích và mọi thay đổi cần thiết đối với implementation hoặc tài liệu đều được bao phủ bởi các test.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

In the document of boost interval https://www.boost.org/doc/libs/1_86_0/libs/numeric/interval/doc/interval.htm#interval
If the interval constructor has only one argument, "The constructors create an interval enclosing their arguments."
But in the following code, seems not working like this, it just sets interval's upper and lower bounds as the same value of my input. This is NOT what we expect for interval arithmetic, since the input may not be precisely stored in a computer.

#include <iostream>
#include <boost/numeric/interval.hpp>

using namespace std;

int main() {
    cout << setprecision(20);
    boost::numeric::interval<double> I = boost::numeric::interval<double>(0.1);
    cout << I.upper() << endl; // print: 0.10000000000000000555
    cout << I.lower() << endl; // print: 0.10000000000000000555
}

another strange thing is when I add a double number, sometimes it gives the desired bound, but sometimes NOT! See below, adding 0.1 to the interval and adding 1.1 to the interval gives different type of the result. adding 1.1 gives the desired result.

#include <iostream>
#include <boost/numeric/interval.hpp>

using namespace std;

int main() {
    cout << setprecision(20);
    boost::numeric::interval<double> I = boost::numeric::interval<double>(0.1);
    I += 0.1 // add 0.1
    cout << I.upper() << endl; // print: 0.2000000000000000111
    cout << I.lower() << endl; // print: 0.2000000000000000111
}
#include <iostream>
#include <boost/numeric/interval.hpp>

using namespace std;

int main() {
    cout << setprecision(20);
    boost::numeric::interval<double> I = boost::numeric::interval<double>(0.1);
    I += 1.1 // add 1.1
    cout << I.upper() << endl; // print: 1.2000000000000001776
    cout << I.lower() << endl; // print: 1.1999999999999999556
}

When compiling I add -frounding-math, and the boost version is v1.85.0.

Ngôn ngữ chính
C++
Star
31
Fork
49
Merge trung bình
2 ngày 2 giờ
Pull request đã merge (30 ngày)
3

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của boostorg/interval

Tất cả issue của boostorg/interval

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.