Một điểm mà tôi không thấy được đề cập rõ ràng (mặc dù amon ám chỉ nó) là căn bậc hai có thể được coi là một hoạt động "có nguồn gốc": nếu việc triển khai không cung cấp cho chúng tôi, chúng tôi có thể tự viết.
Vì câu hỏi được gắn thẻ với thiết kế ngôn ngữ, chúng tôi có thể xem xét một số mô tả không biết ngôn ngữ. Mặc dù nhiều ngôn ngữ có những triết lý khác nhau, nhưng việc sử dụng đóng gói để bảo tồn bất biến là điều rất phổ biến; tức là để tránh có một giá trị không hoạt động như kiểu của nó sẽ gợi ý.
Ví dụ: nếu chúng tôi thực hiện một số số nguyên bằng cách sử dụng các từ máy, có lẽ chúng tôi muốn đóng gói biểu diễn bằng cách nào đó (ví dụ: để ngăn dịch chuyển bit thay đổi dấu hiệu), nhưng đồng thời chúng tôi vẫn cần truy cập vào các bit đó để thực hiện các hoạt động như thêm vào.
Một số ngôn ngữ có thể thực hiện điều này với các lớp và phương thức riêng tư:
class Int {
public Int add(Int x) {
// Do something with the bits
}
private List<Boolean> getBits() {
// ...
}
}
Một số hệ thống mô-đun:
signature INT = sig
type int
val add : int -> int -> int
end
structure Word : INT = struct
datatype int = (* ... *)
fun add x y = (* Do something with the bits *)
fun getBits x = (* ... *)
end
Một số có phạm vi từ vựng:
(defun getAdder ()
(let ((getBits (lambda (x) ; ...
(add (lambda (x y) ; Do something with the bits
'add))
Và như vậy. Tuy nhiên, không ai trong số các cơ chế này là cần thiết cho việc thực hiện căn bậc hai: nó có thể được thực hiện bằng cách sử dụng công cộng giao diện của một số loại, và do đó nó không cần phải truy cập vào các chi tiết thực hiện đóng gói.
Do đó, vị trí của căn bậc hai đi xuống triết lý / thị hiếu của ngôn ngữ và của người thiết kế thư viện. Một số có thể chọn để đặt nó "bên trong" các giá trị số (ví dụ như làm cho nó một phương pháp chẳng hạn), một số có thể chọn để đặt nó ở mức độ tương tự như các hoạt động nguyên thủy (điều này có thể có nghĩa là một phương pháp dụ, hoặc nó có thể có nghĩa là sống bên ngoài các các giá trị số, nhưng bên trong cùng một mô-đun / lớp / không gian tên, ví dụ như một hàm độc lập hoặc phương thức tĩnh), một số có thể chọn đưa nó vào một tập hợp các hàm "trợ giúp", một số có thể chọn ủy thác nó cho các thư viện của bên thứ ba.
1.sqrt()
hợp lệ?