2012-04-28 32 views
13

C99 phụ lục F (IEEE dấu chấm động hỗ trợ) nói điều này:Tại sao pow (-infinity, positive integer) + vô cùng?

pow(−∞, y) lợi nhuận + ∞ cho y> 0 và không phải là một số nguyên lẻ.

Nhưng, nói, (−∞) 0.5 thực sự có giá trị ảo ± ∞i, không phải + ∞. Chính số sqrt(−∞) của C99 trả về một NaN và tạo lỗi miền như mong đợi. Tại sao cần pow để trả lại + ∞?

(Hầu hết các ngôn ngữ khác sử dụng thư viện C trực tiếp hoặc, như Python trong trường hợp này, sao chép các hành vi cần thiết của nó so với tiêu chuẩn, vì vậy trong thực tế điều này ảnh hưởng nhiều hơn chỉ là C99.)

+1

Tôi không chắc chắn ý của bạn là gì "−∞ 0.5 thực sự là số ảo ∞i"; có số tưởng tượng đến từ đâu? –

+2

@OliCharlesworth toán học tiêu chuẩn - lấy sqrt của một số âm cho một số ảo. – Alnitak

+2

@Alnitak: Tôi không chắc chắn các khái niệm như "∞i" đặc biệt có ý nghĩa ... –

Trả lời

13

Đối với số nguyên lẻ y, nó có ý nghĩa để xác định

pow(±0, y) = ±0 

Sau khi tất cả, nâng lên một sức mạnh kỳ lạ luôn giữ nguyên dấu. Nếu chúng ta có thể giữ được dấu bằng không, chúng ta cũng có thể làm điều đó. Đối với dương phi -integer y, chúng ta nên xác định

pow(±0, y) = +0. 

Dấu hiệu được xác định. Nhưng chúng tôi không đặt điều này thành NaN cho -0 vì lý do tương tự mà chúng tôi không đặt sqrt(-0) bằng NaN: điều đó sẽ không có ý nghĩa. (FWIW, đây cũng là cách nó được định nghĩa trong phần 9.2.1 của tiêu chuẩn IEEE-754-2008).

Từ 1/± 0 = ± ∞, và toán học

pow(x,y) = 1/pow(1/x,y) 

sau đó thiết lập x=±∞ ở trên, dẫn đến:

pow(±∞,y) = 1/pow(±0,y) = 1/+0 = +∞ 

cho y một số nguyên dương.

+0

Nếu bạn xem xét (± 1)/0 = ± ∞, xem xét rằng "-0" là số thực giống hệt nhau "0"? –

+0

@HeathHunnicutt '(-inf)^(1/2) = (-1/0)^(1/2) = (-1)^(1/2)/0 = nan/0 = nan' –

+2

Chuyển động này câu hỏi "Tại sao có -0 ở tất cả?" Vâng, một trong những lý do là '-0' đại diện cho dòng chảy từ bên dưới. Khác là nhánh cắt trong mặt phẳng phức tạp, như chúng được định nghĩa theo truyền thống, chỉ hoạt động như mong đợi với '-0'. –

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