Đến nội dung

Hình ảnh

Hỏi nhỏ về C

- - - - -

  • Please log in to reply
Chủ đề này có 4 trả lời

#1
Magus

Magus

    Trung tá

  • Hiệp sỹ
  • 2781 Bài viết
Có ai biết cách tổ lưu trữ một số float trong ngôn ngư C không nhỉ?

ví dụ: đối với số int x = 259 thì byte thấp = 3 và byte cao = 1 thế float 4 byte thi thế nào nếu float x = 0.1
<div align="center"><img src="http://img221.images...4795706ld2.jpg" border="0" class="linked-image" /><br />

<!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...0&#entry168717" target="_blank">Hướng dẫn gõ công thức toán lên diễn đàn cho người mới</a><!--fontc--></span><!--/fontc--></div>

<br /><div align="center"><!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...howtopic=38505" target="_blank">Cách gõ công thức toán mới</a><br /><a href="http://diendantoanho...id=1&Itemid=18" target="_blank"><!--coloro:#008000--><span style="color:#008000"><!--/coloro--><b>Bạn có muốn gửi bài viết của mình lên trang chủ không?</b><!--colorc--></span><!--/colorc--></a><!--fontc--></span><!--/fontc--></div><br /><div align="center"><!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->em=Console.ReadLine();Console.Write("Anh yêu {0}",em);<!--sizec--></span><!--/sizec--><!--fontc--></span><!--/fontc--></div>

#2
TheIncredibleMachine

TheIncredibleMachine

    Binh nhất

  • Thành viên
  • 42 Bài viết
Mình chưa thấy sách nào nói về cách lưu trữ số thực dưới dạng float cả, thậm chí viết chương trình khảo sát cũng khó vì các phép toán trên bit không áp dụng được với số thực.
Bạn thử tìm một số cuốn nào đó nói viết về trình biên dịch xem, mình nghĩ trong đó có nói đề việc lưu trữ số thực dưới dạng nhị phân.
Thực ra bây giờ trong kinh tế, khi viết các phần mềm, người ta thường dùng những thư viện có sẵn để lưu số thực dưới dạng thập phân thay vì nhị phân vì độ chính xác của cách lưu nhị phân rất thấp, hãy thử đoạn chương trình C/C++ dưới để xem kết quả:
Đoạn 1 (biên dịch trên các trình biên dịch C++ bây giờ: Dev-C++, Visual C++):
#include <iostream>

using namespace std;

int main&#40;&#41; {
	float a = 0.1;
	float b = 0.11;
	float c = 0.21;
	if &#40;a + b == c&#41; cout << &#34;True!&#34;;
	else cout << &#34;False!&#34;;
	scanf&#40;&#34;\n&#34;&#41;;
	return 0;
}
Đoạn 2 (biên dịch trên trình biên dịch C/C++ cũ: Turbo C 2.0, Turbo C++ 3.0, Borland C++ cũ):
#include <stdio.h>

int main&#40;&#41; {
	float a = 0.1;
	float b = 0.11;
	float c = 0.21;
	if &#40;a + b == c&#41; printf&#40;&#34;True!&#34;&#41;;
	else printf&#40;&#34;False!&#34;&#41;;
	scanf&#40;&#34;\n&#34;&#41;;
	return 0;
}

Diễn đàn thảo luận giải thuật và lập trình: http://www.ioicamp.net/forums/
Các online judge hay: Sphere Online Judge - SPOJ Vietnam - TopCoder

#3
Magus

Magus

    Trung tá

  • Hiệp sỹ
  • 2781 Bài viết
vâng cảm ơn anh :D em cũng biết vấn đề này hơi quá khó :D .
<div align="center"><img src="http://img221.images...4795706ld2.jpg" border="0" class="linked-image" /><br />

<!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...0&#entry168717" target="_blank">Hướng dẫn gõ công thức toán lên diễn đàn cho người mới</a><!--fontc--></span><!--/fontc--></div>

<br /><div align="center"><!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...howtopic=38505" target="_blank">Cách gõ công thức toán mới</a><br /><a href="http://diendantoanho...id=1&Itemid=18" target="_blank"><!--coloro:#008000--><span style="color:#008000"><!--/coloro--><b>Bạn có muốn gửi bài viết của mình lên trang chủ không?</b><!--colorc--></span><!--/colorc--></a><!--fontc--></span><!--/fontc--></div><br /><div align="center"><!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->em=Console.ReadLine();Console.Write("Anh yêu {0}",em);<!--sizec--></span><!--/sizec--><!--fontc--></span><!--/fontc--></div>

#4
queensland

queensland

    Hạ sĩ

  • Thành viên
  • 97 Bài viết
Kiểu float, double trong ngôn ngữ C tuân theo chuẩn IEEE (cũng đồng thời là chuẩn ANSI và ISO). Bạn có thể xem, chẳng hạn, ở đây:

http://en.wikipedia.org/wiki/IEEE_754

Đó là những kiểu số thực dấu chấm động, thường dùng trong tính toán khoa học kĩ thuật. Nói một cách đơn giản, biểu diễn gồm có 3 số nguyên tương ứng với 3 phần: dấu, phần đặc tính và phần mũ. Còn cơ số của phần mũ không được chứa trong biểu diễn, vì luôn cố định là 2.

Ngược lại, một số ứng dụng thường dùng số thực dấu chấm tĩnh. Một kiểu số thực dấu chấm tĩnh được xem tập hợp các bội nguyên của một số delta nào đó. Biểu diễn của số thực dấu chấm tĩnh thực ra là một số nguyên duy nhất biểu diễn phần bội. Còn delta không được chứa trong biểu diễn, vì luôn cố định bởi bộ biên dịch. Ở ứng dụng liên quan đến thiết bị ngoại vi như robot, máy móc công nghiệp, thiết bị hàng không... delta thường là lũy thừa của 2, chẳng hạn 1/1024 (= 0.0009765625). Tính toán tài chính thường dùng số thực dấu chấm tĩnh thập phân, tức là số thực dấu chấm tĩnh với delta là lũy thừa của 10, chẳng hạn, delta = 0.01.

Nhằm tính toán đơn giản và lưu trữ cô đọng, trong thực tế -- ở bên chuẩn số hoặc ngôn ngữ lập trình hay ở bên thực thi cài đặt -- kiểu số thực dấu chấm động và tĩnh, kể cả dấu chấm tĩnh thập phân, đều thường được tính toán và lưu trữ ở dạng nhị phân. Việc này không có gì khó hiểu nếu để ý rằng chúng đều được biểu diễn nhờ những số nguyên, như đã nói ở trên. Tuy nhiên, số thực vẫn thường được trao đổi giữa các ứng dụng và hiển thị cho người đọc ở dạng thập phân, như thường thấy.

Bài viết đã được chỉnh sửa nội dung bởi queensland: 14-07-2007 - 22:24


#5
pntruongan

pntruongan

    Thượng sĩ

  • Thành viên
  • 263 Bài viết
Float 4 byte tức là được có 32 bit để lưu trữ.
Bit đầu tiên là dấu, 1 cho số âm, 0 cho số dương.
8 bit tiếp theo là số mũ, biễu diễn dưới dạng số quá 127
Các bit tiếp theo là phần định trị.




1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh