Tại sao 0 ^ 0 trong máy tính macOS và iOS cho kết quả khác nhau trên các phiên bản khác nhau?


17

Tôi đã kiểm tra kết quả 0 ^ 0 trong máy tính trên các phiên bản khác nhau:

  • iOS 10.3 => 1
  • iOS 11.4 => Lỗi
  • macOS 10.12.6 => 1
  • macOS 10.13.5 => Không phải là số

Lý do của sự khác biệt là gì?


22
Sau đó tôi sẽ phải gắn bó với High Sierra, 'vì tôi yêu bánh mì NaN ;-))
Tetsujin


cũng news.ycombinator.com/item?id=8502968 <(apple đã ngừng xuất bản phiên bản thư viện toán học libm của họ)
don sáng

3
Bạn đang hỏi để bạn có thể hiểu toán học, hoặc bạn đang hỏi để hiểu tại sao Apple đã thay đổi cách hiểu của mình về 0 ^ 0 nhiều lần? Nếu đó là trước đây, có một câu trả lời chấp nhận được đăng; nếu sau này, thì điều đó có thể không nhất thiết phải trả lời.
zr00

Trong phiên bản 10.11.6, kết quả là 1
Robert Kowal

Câu trả lời:


21

Mặc dù 0⁰ thường không được xác định, một số nhánh của toán học xác định rõ ràng là 1 bởi vì, như bạn có thể thấy , đây là giá trị mà hàm y (x) = xˣ hội tụ tại n = 0.

Ít chính thức hơn, lưu ý rằng 0,5 0,5 = 0,707; 0,2 0,2 = 0,725; 0,1 0,1 = 0,794, và 0,01 0,01 = 0,955. Khi bạn tiếp cận 0, kết quả sẽ tiếp cận 1, điều này làm cho nó khá logic và tiện dụng để xác định 0 ^ 0 là 1 trong một số trường hợp .

Do đó, không có kết quả nào trong 3 kết quả này là không chính xác và thay vào đó chúng đều phản ánh các quy ước khác nhau về giá trị của biểu thức không xác định này.

Có một bài viết Wikipedia tốt giải thích vấn đề. Xem thêm Zero với công suất 0 - là 0⁰ = 1? .


4
Ý bạn là tại x = 0, không phải n = 0.
Ruslan

2
Trước đây tôi chưa bao giờ gặp phải lý do cụ thể đó để đặt 0 ^ 0 = 1. Rốt cuộc, x ^ y không có giới hạn là (x, y) → (0,0). Tuy nhiên , nếu bạn viết một đa thức tổng quát dưới dạng ∑ c_n x ^ n, trong đó n trong tổng nằm trong khoảng từ 0 đến n (mức độ của đa thức), điều quan trọng là phải có 0 ^ 0 = 1, hoặc nếu không thì Rốt cuộc, thuật ngữ không đổi không phải là hằng số. Xem thêm tại đây.
Harald Hanche-Olsen

@ HaraldHanche-Olsen Đó là một điểm rất sâu sắc, vui lòng xem xét việc viết câu trả lời hoặc thoải mái chỉnh sửa của tôi. Trực giác của tôi xuất phát từ thực tế là hầu hết các hàm ở dạng e ^ {αx ^ β * ln ^ {x ^ γ + μ}} sẽ hội tụ thành 1 (ngoại trừ = 0 và có thể một số trường hợp cạnh khác) và lớp đó thường gặp trong các ứng dụng kỹ thuật, tức là loại công cụ mà mọi người có thể sẽ sử dụng ứng dụng máy tính này, nhưng tôi hiểu đó là một thứ rất xa vời.
undercat

3
Mặc dù câu trả lời này đưa ra một lời giải thích tốt về 0 ^ 0 là gì / có thể được định nghĩa là gì, nhưng điều đó không giải thích tại sao Apple đã thay đổi cách giải thích của họ một vài lần.
zr00

1
@DawoodibnKareem Nhận xét của tôi ở trên, và hơn thế nữa, câu hỏi được tham khảo trên math.se, nên giải thích tại sao có thể hữu ích khi có 0 ^ 0 là 1. Tất nhiên, một quy ước như vậy có giá: Biểu thức x ^ y không liên tục tại (0,0).
Harald Hanche-Olsen

13

Hầu hết các triển khai số học dấu phẩy động đều tuân theo tiêu chuẩn IEEE 754-2008, quy định rằng pow (0,0) trả về 1 (xem §9.2.1).

Nhưng nó cũng định nghĩa hai hàm khác: pown (0,0) = 1 và powr (0,0) = NaN.

Wikipedia tóm tắt như sau :

Tiêu chuẩn điểm nổi IEEE 754-2008 được sử dụng trong thiết kế của hầu hết các thư viện dấu phẩy động. Nó khuyến nghị một số hoạt động để tính toán một sức mạnh: [20]

pow coi 0 0 là 1. Nếu công suất là một số nguyên chính xác, kết quả tương tự như đối với pown, nếu không thì kết quả là như đối với powr (trừ một số trường hợp ngoại lệ).

pown coi 0 0 là 1. Công suất phải là một số nguyên chính xác. Giá trị được xác định cho các cơ sở tiêu cực; ví dụ: pown (−3,5) là −243. powr coi 0 0 là NaN (Không phải là số - không xác định). Giá trị cũng là NaN cho các trường hợp như powr (,23,2) trong đó cơ sở nhỏ hơn 0. Giá trị được xác định bởi epower × log (cơ sở).

Biến thể pow được lấy cảm hứng từ chức năng pow từ C99, chủ yếu để tương thích. [21] Nó rất hữu ích cho các ngôn ngữ có chức năng duy nhất. Các biến thể pown và powr đã được giới thiệu do sử dụng mâu thuẫn giữa các chức năng nguồn và các quan điểm khác nhau (như đã nêu ở trên). [22]

Tất nhiên điều này không ảnh hưởng đến kết quả toán học chính xác là gì: như những người khác đã lưu ý, có nhiều hơn một câu trả lời có thể, và IEEE phải đưa ra quyết định tùy ý.


5

Ai đó tại Apple đã nhận ra rằng 0 ^ 0 là một hoạt động không hợp lệ và đã sửa nó.


5

Không với sức mạnh của số không là một mâu thuẫn

  • 0 lần bất kỳ số nào là 0
  • bất kỳ số nào với công suất 0 là 1

sẽ tạo ra một lỗi. Lý do duy nhất mà bạn không thấy lỗi được tạo ra là do phiên bản Máy tính được đề cập không mắc lỗi cho lỗi đầu vào đó.


9
Nhà toán học (rất thô lỗ) sẽ muốn lập luận rằng giới hạn 0 ^ x là 0 khi x tiến đến 0 và giới hạn của x ^ x là 1 khi x tiếp cận 0 do đó bạn có một sự gián đoạn là định nghĩa rất không xác định và làm ấm lòng tôi khi nghe thấy NaN trên một hệ điều hành thực sự
bmike

1
làm ấm lòng tôi - những hình ảnh về con cừu ấm nóng đang làm những vấn đề về tính toán với Sheppard của họ, @bmike :-D
Allan

2
@MrLister và được xác định bởi một số tác giả và không được xác định bởi các tác giả khác, chính xác là cách toán học hoạt động. Trong hầu hết tất cả các bối cảnh, 0 ^ 0 = 1 là định nghĩa đúng (ví dụ: đó là số lượng hàm từ tập rỗng đến tập rỗng). Thực tế là x ^ y không thể liên tục được mở rộng vào nguồn gốc là điều không may và là lý do mà một số nhà giáo dục phân tích thích để nó không được xác định để tránh nhầm lẫn, nhưng thậm chí họ phải mất 0 ^ 0 = 1 khi họ nhận được loạt điện.
Eike Schulte

3
@bmike Không cần liên quan đến giới hạn. Chỉ vì x ^ y sẽ không liên tục tại (0, 0) không có nghĩa là bạn không thể gán giá trị cho 0 ^ 0
Dennis

3
0 ^ 0 = 1 hoàn toàn không phải là một mâu thuẫn. 0 ^ 0 là một sản phẩm trống và do đó 1. 0 ^ 0 là giá trị chính của tập hợp các hàm từ tập rỗng đến tập rỗng và có chính xác một hàm như vậy . Nó cần thiết cho đa thức . Danh sách cứ kéo dài.
dùng76284

4

Có một số tranh cãi về 0⁰ làm sôi hàm x ^ y có sự gián đoạn tại (x, y) -> (0,0). Đây là một dấu chấm phẩy vì nó vô nghĩa về mặt toán học khi cấm một hàm có giá trị không liên tục.

Đó là thực tế chung để nhúng các số nguyên vào các số thực sao cho một hàm được xác định trên các số thực khớp với cùng một hàm được xác định trên các số nguyên bất cứ khi nào hàm thực giả định các giá trị tích phân. Vì vậy, có rất ít điểm trong việc phân biệt 0,0 ^ 0 với 0,0 ^ 0,0.

Bây giờ x⁰ với số nguyên 0 là số mũ là một sản phẩm chứa chính xác các hệ số 0 của x. Vì không có yếu tố nào của x được chứa trong giá trị của nó, nên có rất ít điểm trong việc gán cho nó một giá trị tùy thuộc vào x và giá trị của nó là một sản phẩm trống khá rõ ràng 1, yếu tố trung tính để nhân.

Điều này cũng có ý nghĩa tốt vì nó không tự ý giới hạn định lý nhị thức ở các giá trị khác không. Theo một cách nào đó, đây là một đối số dựa trên việc cố gắng hoàn thành hàm x⁰ một cách hợp lý tại x = 0, làm cho nó được xác định và liên tục ở mọi nơi.

Nếu chúng ta thử điều này với hàm 0 ^ x thay vào đó, giới hạn tại x = 0 + có thể là 0, nhưng việc xác định nó như vậy vẫn không giúp khắc phục sự gián đoạn thiết yếu vì hàm này không được xác định cho âm x.

Bây giờ máy tính có xu hướng tính x ^ y là exp (y * ln (x)). Tất nhiên đó là tin xấu cho x = 0. Vì vậy, các giá trị như vậy phải được lập trình rõ ràng hoặc bạn sẽ không đến số. Để lập trình rõ ràng, bạn phải dựa vào trực giác toán học của lập trình viên, và lập trình viên điển hình sẽ được hướng dẫn nhiều hơn bởi trực giác giả như "một hàm phải liên tục khi được định nghĩa" so với một nhà toán học.

Ngoài ra, bạn có thể mong đợi một loạt các bình luận từ những người dùng khác nhau và các nhà toán học thuần túy sẽ không trở lại máy tính vì tầm nhìn của họ về sự thật toán học rất nhiều, vì vậy bạn không thể mong đợi đầu vào của họ tràn ngập những người khác.

Vì vậy, kết quả là một dân chủ nhiều hơn một toán học, và đa số dân chủ có xu hướng thay đổi.

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.