2013-03-07 51 views
5

Đây là thiết lập:Lưu trữ các số nhỏ (1.0E-12) làm tăng gấp đôi ký hiệu khoa học

Đối với luận án của tôi, tôi muốn kiểm tra thuật toán máy bay được sử dụng tại LHC. Về cơ bản bước đầu tiên là folowing: Với một số 4-đà

p[0] = nullvector(45.0000000000106,33.03951484238976,14.97124733712793,26.6317895033428) 

Tôi muốn để mô phỏng dữ liệu thực nghiệm bằng cách thêm một số (như, 50) được tạo ngẫu nhiên 4 vectơ với ba thành phần cuối cùng trong thứ tự của 10^(-12), để chúng nhỏ (đó là nơi vật lý thú vị xảy ra), nhưng đáng kể trên độ chính xác gấp đôi của 15 số thập phân. Vì vậy, các giải pháp nhanh chóng-và-bẩn vào đó là những điều sau đây:

seed=time(NULL); 
srand(seed); 
random=(rand()%9001)*1.0E-15; 
random=random+1E-12; 
printf("%.15E\n",random); 

này mang lại cho tôi số ngẫu nhiên giữa 1E-12 và 10E-12 (= 1E-11) với ba thập phân tối đa, do đó trong "thực "gấp đôi, điều đó mang lại cho tôi 15 thập phân.

Bây giờ đến điểm: Tôi có thể lưu trữ các số theo thứ tự đó với hơn ba số thập phân mà không vượt quá độ chính xác phao gấp đôi không?

PS: Có cách nào tốt hơn để tạo các số ngẫu nhiên nhỏ không? (Điều này nghe có vẻ giống như một chủ đề khác;))

Trả lời

1

Phương pháp truyền thống để tạo nổi điểm số ngẫu nhiên là để làm cho nó một khoảng [0-1) bằng cách lấy double x = (double)rand()/RAND_MAX; - sau đó nhân 9001E-1 để mở rộng phạm vi của bạn đến 1E-12-1E-15 giá trị [số không bao gồm].

+0

Rất tốt, cảm ơn! Có bất kỳ đọc về lý do tại sao "phương pháp truyền thống" sử dụng phân chia số nguyên thay vì mô đun? –

+1

Xin lỗi, bỏ lỡ một bên của phân chia để nổi ... Modulo sẽ, khi bạn chỉ ra tạo ra một số nguyên (trong trường hợp của bạn trong khoảng 0..9001, sau đó bạn nhân để làm cho nó nhỏ hơn nhiều, nhưng nó sẽ chỉ cung cấp cho 3 chữ số thập phân.Phương pháp phân chia không đưa ra phạm vi phân số lớn hơn, vì RAND_MAX thường là 2^31-1, mang lại tiềm năng cho một số lượng lớn các chữ số thập phân được "điền vào" –

+0

I thấy, với typecast điều này là phù hợp và giải quyết vấn đề thập phân :) Chúc mừng! –

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