Ketidakpastian Matematika dalam Python

Halo semuanya! Kami sering menggunakan angka yang tidak asing dalam bahasa pemrograman favorit kami. Kebiasaan adalah 1, -1.5, pi atau bahkan kompleks. Tetapi NaN, + Inf, -Inf lebih jarang digunakan oleh kita.

Catatan:

Dalam artikel itu, saya menggunakan fungsi dasar dari Python versi 3.6.8, tetapi banyak yang akan relevan untuk bahasa lain, misalnya, untuk JS.

Ada banyak situasi yang tidak pasti dalam matematika. Misalnya, ini adalah pembagian dengan 0.
Mengetik di konsol

1/0 

Anda akan mendapatkan kesalahan ZeroDivisionError. Diharapkan, katamu? Ya Mari kita coba contoh lain:

 0**0 

Seperti yang Anda ketahui, 0 pangkat 0 adalah ketidakpastian matematika klasik.
Namun, Python mengatakan ini adalah 1. Sebuah pertanyaan masuk akal muncul:

gambar

Mengapa kita tidak diizinkan untuk "menembak di kaki" dibagi dengan 0, tetapi mereka melaporkan hasil yang salah dengan tindakan yang tidak terbatas?

Mungkin seseorang sekarang marah dan berteriak bahwa jawabannya sederhana: IEEE 754. Dan jika saya tidak salah, dengan bantuannya kami sepakat bahwa angka dalam derajat 0 adalah 1.

Di sinilah kesenangan dimulai. JavaScript juga mendukung IEEE (0,1 + 0,2! = 0,3), tetapi 1/0 di dalamnya adalah tak terbatas, bukan pembagian dengan 0 kesalahan.

Hasilnya, kami memiliki (semua contoh untuk python):

1. Kesalahan yang dihasilkan oleh tindakan yang salah

Contoh:

 1/0 # ZeroDivisionError log(0) #ValueError 

2. Kembalikan nilai yang salah

Contoh:

 0**0 #1 1**inf #1.0 

3. Kembalikan nilai-nilai khusus:

+ -Inf, nan

Contoh:

 inf=float('inf') inf-inf #nan 

Menurut saya ini membingungkan.

Baru hari ini, saya memperhatikan perilaku PHP yang menarik:

 var_dump(mt_rand(INF,INF)); //  INF  INF - NULL?? //        false. 

Saya pasti menentang 2 opsi dan mungkin mendukung 1.

Karena, seperti ditunjukkan oleh contoh PHP, Anda harus menggunakan inf dan nan dengan hati-hati. Apa yang kamu pikirkan

Source: https://habr.com/ru/post/id454352/


All Articles