Tìm chữ số thứ n sau dấu phẩy C++

Nội dung chính

  • Ngôn ngữ C++ là gì?
  • Định dạng dấu phẩy trong C++
  • Lỗi làm tròn trong các phép so sánh khi lấy số thập phân trong C++
  • Video liên quan

Ta thấy $\dfrac{1}{49}=0,(020408163265306122448979591836734693877551)$ (chu kì $42$ số) Ta có: $2007:42$ dư $33$

$\Longrightarrow$ Số cần tìm là số $4$

Tìm chữ số thứ n sau dấu phẩy C++

Các ngôn ngữ lập trình như Java Script, My SQL hay C++ là những ngôn ngữ lập trình khá phổ biến, trở thành tiêu chí xét duyệt của doanh nghiệp trong bài thi viết của kỹ sư công nghệ thông tin. Trong ngôn ngữ C++ thì định dạng số thông thường máy tính không thể nào hiểu và xử lý thông tin được. Điều đó bắt buộc người lập trình phải có kỹ năng chuyển đổi số thành các chuỗi ký tự dạng floating mà máy tính hiểu được. Bài viết dưới đây sẽ cho bạn biết rõ hơn về khái niệm số thập phân trong C++ và cách lấy 2 chữ số sau dấu phẩy trong C++ nhé!

Ngôn ngữ C++ là gì?

C++ là ngôn ngữ “đa hướng”. Tính năng hướng đối tượng là một tính năng khá quan trọng trong lập trình C++. Lập trình hướng C++ và hướng đối tượng C++ là một trong những nền tảng cơ bản được đào tạo. Đây là ngôn ngữ khá phổ biến trên thế giới với nhiều chương trình và doanh nghiệp công nghệ nổi tiếng sử dụng.

Về lịch sử ngôn ngữ C++ phát triển từ ngôn ngữ C từ cuối thập niên 1970. Đây là phiên bản nâng cấp của ngôn ngữ C với đầy đủ các tính năng như lập trình hệ thống, lập trình game hoặc một số lập trình nhúng có quy mô cơ bản hoặc cao cấp khác.

Một số chương trình được viết từ C++:

  • Hệ điều hành Operating systems: C++ là một phần không thể thiếu của rất nhiều hệ điều hành phổ biến hiện nay như Mac OS, Microsoft Window…

  • Về đồ họa: C++ được dùng để tạo ra các phần mềm đồ họa đình đám như Imageready, Adobe Premiere, Photoshop, Illustrator, … Xử lý tính toán đồ họa 3D trong Maya 3D…

    Tìm chữ số thứ n sau dấu phẩy C++

Top các phần mềm thiết kế

  • Trò chơi: C++ được dùng để tạo ra rất nhiều game nổi tiếng trên thế giới như  StarCraft series, Doom 3, Team Fortress 2, World of Warcraft, Diablo series,…Và tất nhiên cũng có rất nhiều engine game sử dụng C++ để phát triển như Unreal Engine, Cocos2dx framework…

Định dạng dấu phẩy trong C++

Định dạng dấu phẩy được dùng để lưu trữ những số hoặc chữ số có định dạng là số thập phân. Đó là những số có (hoặc có thể có) một phần thập phân sau dấu thập phân. Mỗi khi nào chúng ta sử dụng thuật ngữ “ba và một phần hai” hoặc “không phẩy tám” thì đó là khi chúng ta nghĩ về một số mà máy tính coi nó là số floating. Dấu phẩy có thể di động ở số thập phân mà ta mong muốn.

VD: Bạn có thể viết giá trị ba phẩy năm trong C++ là 3.5 

Lưu ý giữa 2 số là dấu chấm (.) chứ không phải dấu phẩy.

Hoặc bạn có thể viết không phẩy bốn trong C++ là 0.4 hoặc .4

Lưu ý nếu chuỗi số thập phân bắt đầu bằng số 0 thì có thể lược bỏ hoặc hệ thống sẽ giúp bạn loại bỏ sau khi nhập dữ liệu.

Số nguyên thường được sử dụng nhất trong ngôn ngữ lập trình C++, nhưng đó không là lựa chọn thông minh khi bạn đang muốn lưu trữ khối lượng dữ liệu lớn. Biến kiểu dấu phẩy động là biến có thể chứa một số thực, chẳng hạn như 4320.0, -3.33 hoặc 0.01226. Trong biến có thể bao gồm chữ số thập phân theo mong muốn.

Dấu phẩy động trong số thập phân chia làm 3 loại: float, double và long double. Kích thước của chuỗi số không được C++ ước lượng chính xác. Nhưng vẫn nằm trong khoảng nhất định (nhưng nó đảm bảo kích thước tối thiểu). Số được định dạng theo kiểu nhị phân với số lượng số đi kèm tùy thuộc vào định dạng người viết chọn.

Category
Type
Minimum Size
Typical Size

floating point

float

4 bytes

4 bytes

double

8 bytes

8 bytes

long double

8 bytes

8, 12, or 16 bytes

Code lập trình:

#include <iostream>

int main()

{

     std::cout << 5.456 << ‘\2’;

     std::cout << 6.78f << ‘\2’;

     std::cout << 9876543.21 << ‘\n’;

}

Kết quả

5.46

6.78

9.87654e+06

Kết luận: Ta thấy các số thập phân có cấu trúc phức tạp sẽ được làm tròn 2 chữ số theo mong muốn. Nếu người lập trình không muốn lấy 2 chữ số mà đổi thành  ‘\n’ thì dãy số sẽ thu gọn sao cho khoa học nhất.

Lỗi làm tròn trong các phép so sánh khi lấy số thập phân trong C++

Chỉ nhờ dấu phẩy thì khó có thể phân biệt được giữa số nhị phân (dữ liệu lưu trữ ) và số thập phân (số chúng ta nhìn thấy). Xét phân số 1/10. Trong phần thập phân, số này dễ dàng được biểu thị bằng 0,1 và người đọc chương trình cũng chỉ biết nó ở phạm vi 0,1 mà thôi. Trong hệ nhị phân ngôn ngữ C++, trong hệ nhị phân, 0,1 được biểu thị bằng chuỗi vô hạn: 0,0001100110011001. Khi chúng ta gán 0,1 cho một số dấu phẩy động, người đọc không thể nào hiểu được các dãy số quan trọng phía sau. Sai sót tuy rất nhỏ nhưng trong CNTT cần độ chính xác cao thì điều đó đích thực khá nguy hiểm.

Ta có ví dụ sau:

#include <iostream>

#include <iomanip> // for std::setprecision()

int main()

{

    double d{0.1};

    std::cout << d << ‘\n’; // use default cout precision of 6

    std::cout << std::setprecision(17);

    std::cout << d << ‘\n’;

    return 0;

}

Kết quả:

0.1

0.10000000000000001

Kết quả trên cùng cho thấy kết quả là 0,1 nhưng khi không làm trong ở size số 17 thì chuối số d thực sự không hoàn toàn 0,1! Bộ nhớ của double còn hạn chế nên chỉ có thể cắt ngắn chuỗi số. Cuối cùng là một số chính xác đến 16 chữ số, nhưng số này không chính xác 0,1. Khi làm tròn số có thể bé hơn hoặc lớn hơn dữ liệu ban đầu một khoảng cách biệt.

Một ngôn ngữ lập trình phức tạp như C++ có muôn hình vạn trạng, rất khó để tiếp thu trong một thời gian ngắn. Lấy 2 chữ số sau dấu phẩy trong C++ không quá phức tạp nhưng dễ nhầm lẫn trong cú pháp hoặc xảy ra các lỗi do làm tròn số.