2011-01-14 36 views
6

Cụ thể:.C++ sqrt lợi nhuận -1 # IND000000000000

Im làm một số hoạt động toán học, và các ứng dụng vẫn bị treo vì một đôi được sử dụng rộng rãi xảy ra để có được giá trị: # IND000000000000 khi "một số -1. "các con số là sqrt'ed ... Đây là gì? Không xác định? Vô hạn? Quá lớn để vừa? Không phải là một Square Root hoàn hảo? Có cách nào để giải quyết vấn đề này không? Cảm ơn bạn trước! EDIT: Làm thế nào tôi có thể kiểm tra xem một đôi có giá trị này? Tôi đã thử: nếu (x == 0x-1. # IND000000000000) và các biến thể khác nhưng không hoạt động. Có thể kiểm tra xem một biến có giá trị này không?

+1

là 'một số số' nhỏ hơn 0 có lẽ? Nói cho tôi biết, sqrt là gì? -1 – EnabrenTane

+4

Căn bậc hai của -1 là i. –

+5

Rõ ràng EnabrenTane có nghĩa là, "IEEE 754 sqrt của -1.0 là gì?" –

Trả lời

10

Thực tế, chuỗi -1.#IND000000000000 không phải là giá trị, được trả về bởi hàm, nhưng nó là một trong những biểu diễn chung của QNaN, Quiet Not-a-Number, giá trị IEEE-754 đặc biệt đại diện cho số không hợp lệ. ngoại lệ (cũng có SNaN, Signalling NaN, điều này sẽ gây ra ngoại lệ dấu chấm động, nếu được bật). Nguyên nhân phổ biến của việc này là gọi một hàm với đối số ra khỏi miền của nó.

+1

Không chỉ có một giá trị như vậy mà còn rất nhiều. –

+0

Có, nhiều bố cục bit nhất định đại diện cho cùng một "giá trị của NaN". – mbaitoff

0

Không sử dụng loại phức tạp, sqrt của bất kỳ giá trị nào dưới 0 có nghĩa là gây ra ngoại lệ.

1

Nếu đối số là số âm, lỗi miền xảy ra, hãy đặt biến toàn cục sai về giá trị EDOM.

2

Giá trị #IND000000000000 đại diện cho giá trị số không hợp lệ. Điều này thường được gọi là giá trị QNaN (Yên lặng không-A-Số) vì nó đại diện cho một loại không xác định nhưng không gây ra các phép tính thất bại.

Rất có thể, các số khó nắm bắt có căn bậc hai mà bạn đang cố gắng xác định là số âm, mà giá trị đó không được xác định. Xem Wikipedia để biết thêm thông tin.

Giải quyết nó trước tiên sẽ yêu cầu bạn xác định nơi xảy ra sự cố. Điều đó có nghĩa là bạn cần phải tự mình trải qua nó bằng trình gỡ lỗi và xem giá trị của các biến hoặc đăng mã của bạn để chúng tôi có thể thực hiện tương tự.

0

Đó là NaN (Không phải số). Nó có nghĩa là bạn đã gọi sqrt với một đối số phủ định.

Cheers & h.,

5

Nans (chẳng hạn như "không xác định" bạn có và "vô cực") có thể được phát hiện bằng cách kiểm tra x == x (đó là sai sự thật cho NaN và đúng đối với bất kỳ số lượng hữu hạn).

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