bc không hỗ trợ tính toán log và giai thừa?


17

Có máy tính dòng lệnh nào khác hỗ trợ log, n!tính toán không? Ít nhất là bckhông thể làm điều đó, nó nói với tôi lỗi phân tích

Tốt nhất là tôi có thể sử dụng tập lệnh, vd echo '5!' | program

Câu trả lời:


20

bchỗ trợ logarit tự nhiên nếu được gọi bằng -lcờ. Bạn có thể tính toán nhật ký cơ sở 10 hoặc cơ sở 2 với nó:

$ bc -l
...
l(100)/l(10)
2.00000000000000000000

l(256)/l(2)
8.00000000000000000007

Tôi không nghĩ rằng có một giai thừa tích hợp, nhưng điều đó đủ dễ để tự viết:

$ bc
...
define fact_rec (n) { 
  if (n < 0) {
    print "oops";
    halt;
  }
  if (n < 2) return 1;
  return n*fact_rec(n-1);
}
fact_rec(5)
120

Hoặc là:

define fact_it (n) {
  if (n < 0) {
    print "oops";
    halt;
  }
  res = 1;
  for (; n > 1; n--) {
    res *= n;
  }
  return res;
}
fact_it(100)
93326215443944152681699238856266700490715968264381621468592963895217\
59999322991560894146397615651828625369792082722375825118521091686400\
0000000000000000000000

Để tuân thủ POSIX, bạn cần viết nó:

define f(n) {
  auto s, m
  if (n <= 0) {
    "Invalid input: "
    n
    return(-1)
  }
  s = scale
  scale = 0
  m = n / 1
  scale = s
  if (n != m) {
    "Invalid input: "
    n
    return(-1)
  }
  if (n < 2) return(1)
  return(n * f(n - 1))
}

Đó là: tên hàm ký tự đơn, không print, không halt, dấu ngoặc đơn cần có trong return(x). Nếu bạn không cần xác thực đầu vào (ở đây cho các số nguyên dương), thì đó chỉ là:

define f(n) {
  if (n < 2) return(1)
  return(n * f(n - 1))
}

1
kiểm tra n == 1 kết quả trong vòng lặp vô tận nếu bạn cho nó số âm hoặc bằng 0. sử dụng n <= 1 thay vì như trong trang bc man. Tuy nhiên, thực sự, nó sẽ trả về một lỗi của số âm - theo en.wikipedia.org/wiki/ nam đây là một vấn đề đã biết với việc sử dụng để đệ quy để tính giai thừa.
cas

điều này không có nghĩa là một nghiên cứu trong việc thực hiện hoàn hảo giai thừa, chỉ là một bản demo đơn giản để cho thấy rằng bc có các chức năng, bao gồm các hàm đệ quy.
Mat

đúng, nhưng một ngày nào đó ai đó sẽ đọc chức năng ví dụ đó và nói "tuyệt vời, tôi đã tự hỏi làm thế nào để làm điều đó" và sử dụng nó. BTW, tôi về như xa là một toán geek như bạn có thể và vẫn còn là một geek máy tính ... nhưng kể từ khi tôi đã sửa một lỗi tôi nghĩ tôi tốt hơn sẽ làm một ít nghiên cứu đầu tiên :)
cas

Ok, bạn đi đây Các phiên bản đệ quy và lặp chính xác ...
Mat

không hoàn toàn chính xác : 0!=1, giống như 1!=1. Ít nhất, đó là những gì wikipedia nói.
cas

4

Orpiecác máy tính cho máy tính và dòng lệnh geeks. Nó mô phỏng một máy tính HP RPN hiện đại, tất nhiên là cách duy nhất để tính toán.

Nếu bạn là một người nghiện máy tính, lớn lên trên TI, Casios, và như vậy, có rất nhiều hướng dẫn RPN trực tuyến mà bạn có thể bắt đầu giáo dục lại. Hướng dẫn sử dụng Orpie cuối cùng sẽ có ích cho bạn, một khi bạn có được cách suy nghĩ RPN.

Để tính 5! trong Orpie, chỉ cần gõ nó khi bạn viết nó : 5 !. Bạn có thể nhấn Entergiữa chúng để đẩy 5lên ngăn xếp trước, nhưng không cần thiết.

Để tính log 10 (5), gõ 5 Enter ' l o Enter. Bạn phải đẩy 5ngăn xếp lên trước trong trường hợp này, vì tổ hợp phím tiếp theo không phải là toán tử. Ký tự trích dẫn đơn đó vào chế độ viết tắt lệnh, cho phép bạn bắt đầu nhập log10, bạn có thể nhận dạng duy nhất chỉ với hai ký tự đầu tiên. ( lmột mình giúp bạn có chức năng đăng nhập tự nhiên, lnthay vào đó.)

Như với bất kỳ máy tính RPN nào, bạn có thể thực sự nhanh chóng với Orpie, với một chút luyện tập.

Orpie là trong kho Ubuntu repos. FreeBSD bao gồm nó trong Cổng, như math/orpie. Trên OS X, bạn có thể cài đặt nó thông qua Homebrew . Gói bên thứ ba có thể có sẵn cho các hệ điều hành khác. Xây dựng từ nguồn có thể là một chút việc vặt, vì nó được viết bằng OCaml và có lẽ bạn không cài đặt môi trường phát triển OCaml. Mặc dù vậy, việc thiết lập một thiết lập không quá khó.


2

Luôn có GNU Octave , emacs của máy tính dòng lệnh (khi bạn muốn có một môi trường phát triển hoàn chỉnh và ngôn ngữ lập trình được tích hợp sẵn trong máy tính của bạn và hàng ngàn tiện ích bổ sung tùy chọn)

hoặc R nếu số liệu thống kê là nhiều thứ của bạn.

Tôi chủ yếu chỉ sử dụng bc -lđể tải thư viện toán học tiêu chuẩn ... Tôi thậm chí còn có bcbí danh bc -l. Xem câu trả lời của Mat để biết thông tin về cách xác định hàm giai thừa .... mặc dù bctrang man định nghĩa nó là:

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

Việc kiểm tra <= 1 thay vì == 1 sẽ ngăn chặn một vòng lặp vô tận nếu bạn tình cờ cung cấp cho nó một số âm (nên là một lỗi) hoặc bằng không (hợp lệ).


1

Yêu thích của tôi là nhẹ, đơn giản W-Calc. http://w-calc.sourceforge.net

Bạn không cần phải tìm trong hướng dẫn hoặc tạo lại thủ công các chức năng phổ biến, giống như bạn làm với bc- các lệnh chủ yếu là chính xác những gì bạn mong đợi, vì vậy chỉ cần nhập những gì bạn muốn và nó chỉ hoạt động. Kiểm tra theo câu hỏi của bạn - thực sự log()& n!làm việc như mong đợi.

(Phải thừa nhận rằng tôi chưa nghe nói về Orpie - rất có thể là một lựa chọn tốt hơn.)


0

Hoàn toàn quá mức cần thiết, nhưng thông dịch viên ngôn ngữ lập trình là máy tính dòng lệnh sau tất cả:

$ echo 5 | python -c 'import sys; import math; print math.factorial(int(sys.stdin.readline()));'
120

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.