2013-04-23 33 views
5

bc, một máy tính Linux dòng lệnh, là đủ thành thạo để tính toánSử dụng mũ phân đoạn với bc

3^2 
9 

mũ Thậm chí tiêu cực không nhầm lẫn nó:

3^-2 
0.11111 

Tuy nhiên, khi nó không thành công khi nó enounters

9^0.5 
Runtime warning (func=(main), adr=8): non-zero scale in exponent 

Làm thế nào để bc không thể xử lý việc này?

Và thông báo lỗi có ý nghĩa gì?


Vâng, tôi đã đọc http://www.linuxquestions.org/questions/programming-9/bc-and-exponents-containing-decimals-and-fractions-755260/ và giải pháp

e(0.5*l(9)) 
2.99999999999999999998 

được ở đó.

Và có, nó là không tốt vì độ chính xác bị mất và

Một máy tính có nghĩa vụ phải giải quyết biểu thức. Bạn đang không được phép làm cho cuộc sống dễ dàng hơn cho các máy tính, nó được coi là các cách khác xung quanh ...


này tính năng được thiết kế để khuyến khích người dùng viết các chức năng riêng của họ. Biến nó thành một máy tính duy nhất yêu cầu hàm do người dùng xác định để tính căn bậc hai.

Nó không thực sự làm phiền tôi để viết một hàm cho tangents hoặc cotang vì nó trông khá đơn giản cho s(x)c(x). Nhưng theo quan điểm của tôi, tính một căn bậc hai thông qua một hàm do người dùng định nghĩa là hơi quá nhiều.

Tại sao mọi người sử dụng bc nếu có python ngoài đó? Tốc độ?

+0

Đối số thứ hai của expr^expr phải là một số nguyên (scale = 0). Nhưng 0,5 có tỷ lệ = 1. – hendrik

+0

Lưu ý 'bc' có một hàm gốc hình vuông gốc đã có:' scale = 5; sqrt (9) ' – khaverim

Trả lời

2

bc là các hàm rất cơ bản và phức tạp hơn không được cung cấp bởi "phần mở rộng toán" phải được triển khai trong chính ngôn ngữ đó: nó có tất cả những gì bạn cần làm; cụ thể là "quyền lực" là một ví dụ phổ biến ngay cả trên wikipedia.

Nhưng bạn cũng có thể quan tâm đến việc đọc ví dụ this answer tại đây trên SO.

+0

Tôi đồng ý với điều này đã không bc có chức năng 'quyền lực' đã có trong đó. Nó có thể tính toán '3^2' và thậm chí' 3^-2' một cách hoàn hảo. Tuy nhiên, nó trả lời với thông báo lỗi không thể giải mã được khi yêu cầu một hàm đơn giản như một căn bậc hai. –

+0

không có chức năng nguồn: nó có chức năng nguồn nguyên. Các lỗi khi tôi yêu cầu '9^0,11' trong bc tôi có thể sử dụng bây giờ là" exp không phải là một số nguyên "mà làm cho nó rõ ràng hơn. Nhưng "tỷ lệ khác không" có nghĩa là giống nhau, vì bạn sử dụng 'scale = 0' để nói bc bạn muốn" số nguyên chính xác "(không có số thập phân). – ShinTakezou

+0

"nó không có chức năng nguồn: nó có chức năng số nguyên" không có ý nghĩa. Mỗi hàm khác trong bc đều chấp nhận các đối số phân số. Tại sao làm cho một ngoại lệ cho một chức năng được sử dụng rộng rãi như vậy? –

0

Trong bc, b phải là một số nguyên trong^b. Tuy nhiên bạn có thể thêm các chức năng của riêng bạn để bc như thế này:

tạo ra một tập tin ~/.bcrc, thêm chức năng sau đây để nó:

define pow(a, b) { 
    if (scale(b) == 0) { 
     return a^b; 
    } 
    return e(b*l(a)); 
} 

sau đó bạn có thể bắt đầu bc như sau:

bc -l <(cat ~/.bcrc) 

để bạn có thể sử dụng hàm chức năng để thực hiện phép tính đó.

Xem thêm here, bạn có thể thêm một số chức năng khác vào bc.

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