Nhân đôi BC đầy đủ chính xác tự động


10

Cao, tôi cần kiểm tra máy tính chính xác tùy ý của mình và bccó vẻ như là một thước đo đẹp để so sánh với, tuy nhiên, bckhông cắt bớt kết quả của mỗi phép nhân với tỷ lệ tối đa của các toán hạng liên quan.

Có cách nào nhanh chóng để tắt tính năng này hoặc tự động đặt tỷ lệ của từng phép nhân thành tổng tỷ lệ của các yếu tố để nó không mất bất kỳ độ chính xác nào không?

Nếu bạn có một giải pháp tao nhã hơn cho vấn đề này liên quan đến điều gì khác bc, tôi sẽ đánh giá cao việc bạn chia sẻ nó.

Thí dụ:

$ bc <<< '1.5 * 1.5'
2.2

Câu trả lời thực sự là 2,25.


Liên quan chặt chẽ đến hoạt động Float với bc? .
thao tác

Câu trả lời:


12

Bạn có thể kiểm soát thang đo bcđầu ra với scale=<#>đối số.

$ echo "scale=10; 5.1234 * 5.5678" | bc
28.52606652

$ echo "scale=5; 5.1234 * 5.5678" | bc
28.52606

Sử dụng ví dụ của bạn:

$ bc <<< 'scale=2; 1.5 * 1.5'
2.25

Bạn cũng có thể sử dụng công -ltắc (nhờ @manatwork) sẽ khởi tạo thang đo thành 20 thay vì mặc định là 0. Ví dụ:

$ bc -l <<< '1.5 * 1.5'
2.25

$ bc -l <<< '1.52 * 1.52'
2.3104

Bạn có thể đọc thêm về scaletrong bctrang người đàn ông .


5
Hoặc ngắn hơn : bc -l. “ -L (The ell lá thư.) Xác định các hàm toán học và quy mô initialize đến 20, thay vì không mặc định” - bcđặc điểm kỹ thuật
manatwork

@manatwork - cảm ơn, không để ý đến công tắc đó.
slm

Cảm ơn. Tôi đoán rằng tôi có thể đặt thang đo thành 2147483647 (tương đương với INT_MAX), mà bc nói với tôi là giá trị thang đo tối đa tôi có thể đặt (tôi đang thử nghiệm đến mức trong các thử nghiệm của mình), nhưng tôi sẽ đoán tôi 'sẽ chỉ kiểm tra nó với các số nguyên và cung cấp cho bc những lợi ích hiệu suất đến từ việc sử dụng các số có độ dài động.
PSkocik

1
Đối với phép nhân bc, thang đo của kết quả chính xác là min(max(sx,sy,scale),sx+sy)vị trí sxsytỷ lệ của xytrong x*y. Cài đặt scale=scale(x)+scale(y)sẽ cho độ chính xác tối đa cần thiết. Đặt tỷ lệ thành số cao hơn (như 1000) sẽ không làm tăng tỷ lệ của kết quả. Biến tỷ lệ chỉ ảnh hưởng trực tiếp đến kết quả của phép chia scale=1000; a/1sẽ tạo ra kết quả có 1000 chữ số thập phân (sau dấu chấm) bất kể tỷ lệ của a là gì trước đó.
Isaac

1

Thử cái này :

$ bc
scale=10
1.5 * 1.5
2.25

Tìm kiếm người đàn ông của bc cho biến quy mô


0

Tôi đã tạo hàm bash này sẽ không hiển thị các số 0 ở cuối

calc () { MAX_PRECISION=20; bc <<< "scale=$MAX_PRECISION; scale = scale($@); $@"; }

Ví dụ: calc 1.25^3= 1.953125

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.