2012-06-19 19 views
6

Trong C#, có một loại được gọi là decimal (cấu trúc System.Decimal). Tôi đã tìm thấy thông tin cho thấy nó như thế nào là tốt hơn so với floatdouble loại đối với một số trường hợp:Có bất kỳ "loại" trên Borland C++ Builder như "thập phân" từ C#?

Có bất kỳ loại tương tự cho các chương trình Builder Borland C++?

+2

Intel có thư viện http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library/ thực hiện thông số kỹ thuật số học dấu chấm động thập phân IEEE 754-2008 – dash

+1

@ dấu gạch ngang, Liên kết bạn cung cấp và thư viện Intel có vẻ đầy hứa hẹn. Đó là giá trị một thử cho một ai đó mà cần độ chính xác cao. –

+1

Thay vì sử dụng Borland C++ đã lỗi thời, bạn có thể chuyển sang C++ .NET và sử dụng System.Decimal không? Chắc chắn bạn có thể tạo một chương trình nhỏ trong .NET cho đầu vào. –

Trả lời

8

Loại decimal loại C#, .NET là loại số dấu phẩy động được lưu trữ dưới dạng base-10 thay vì mã hóa base-2. floatdouble là các số dấu phẩy động cơ bản-2 điển hình hơn. Tức là, một double được lưu trữ dưới dạng +/- x * 2^y trong khi một số thập phân được lưu trữ dưới dạng +/- x * 10^y. Đó là lý do tại sao nó tốt hơn cho, ví dụ, dữ liệu tài chính, thường được thể hiện dưới dạng x * 10^-2. Chuẩn IEEE 754 (tiêu chuẩn toán học dấu chấm động) gọi phép toán "dấu chấm động thập phân" này, và định nghĩa một phiên bản 32 và 64 bit của mỗi toán tử.

Trong C++, các loại này được triển khai trong không gian tên std::decimal và được gọi là std::decimal::decimal32std::decimal::decimal64, trong tiêu đề <decimal>. Nếu builder Borland C++ có kiểu như vậy, bạn sẽ tìm thấy nó ở đó. Thư viện C++ của GNU bao gồm tiêu đề này nhưng, AFAIK nó không thực sự là một phần của tiêu chuẩn, vì vậy BCB có thể không có nó. Nếu đúng như vậy, bạn cần sử dụng thư viện của bên thứ ba. Ví dụ về @ dash của thư viện Decimal Floating Point của Intel có lẽ là thư viện được biết đến nhiều nhất, mặc dù tìm kiếm trên Google cho số IEEE 754 Decimal nên bật lên những người khác nếu, vì một lý do nào đó, bạn cần chúng.

+1

Câu trả lời hay cho +1 và Cthulhu – dash

+0

Câu trả lời @Cthulhu ở đâu ??? – kokbira

+1

@kokbira Avatar của Michael có vẻ như là một bức ảnh của anh chàng đẹp trai toàn diện từ truyện viễn tưởng Lovecraftian đôi khi được gọi là Cthulhu. Ngoại trừ anh ta không đẹp lắm. – dash

3

Đây là những loại phao mà bạn có thể sử dụng trong Delphi:

single : 4 bytes (32bits) 
real : 6 bytes (48bits) 
double : 8 bytes (64bits) 
currency: 8 bytes (64bits) (this is probably what you're looking for) 
extended: 10 bytes (80bits) (maps to double when you compile to x64!) 

Trong C++ builder có vẻ là một lớp System::Currency bắt chước Delphi được xây dựng trong loại tiền tệ. Có lẽ nó giúp để nhìn vào đó.

+0

Thú vị. Bạn có biết nếu nó sử dụng base-10 để lưu trữ các giá trị không? Điều gì về phạm vi 'loại tiền tệ'? – kokbira

2

Tôi tìm thấy liên kết này Borland C++ Primitive Data types. Xem trong HTML.

Có loại đôi dài có dung lượng 10 byte.

Tài liệu này mang tính thông tin. Bạn có thể vẫn muốn đọc nó.

+0

Rất nhiều thông tin, nhưng tôi đã tìm cách sử dụng các giá trị dấu phẩy được lưu trữ trên cơ sở-10 thay vì trên cơ sở-2 để xem liệu một số tính toán trên các chương trình nhất định có trở nên chính xác hơn không ... – kokbira

+0

Vâng, tôi có thể tính toán chính xác hơn sử dụng 'long double', ví dụ, nhưng tôi muốn đánh giá một giải pháp với base-10 ... – kokbira

+0

Nếu tôi hiểu tài liệu của Borland một cách chính xác, Borland float và double type sử dụng base 10 thay vì base 2. –

Các vấn đề liên quan