Saya perhatikan bahwa di python ada dua metode pencarian serupa untuk menemukan nilai absolut sebuah angka:
Pertama
abs(-5)
Kedua
import math
math.fabs(-5)
Apa perbedaan metode ini?
math.fabs()
mengonversi argumennya menjadi float jika bisa (jika tidak bisa, itu melontarkan pengecualian). Kemudian mengambil nilai absolut, dan mengembalikan hasilnya sebagai pelampung.
Selain pelampung, abs()
juga berfungsi dengan bilangan bulat dan bilangan kompleks. Jenis kembaliannya bergantung pada jenis argumennya.
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/npe/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
abs
bekerja dengan lebih dari sekedar integer dan float, dan jenis hasil tidak selalu sama dengan argumennya, misalnyaabs(3+4j)
.fabs
mengambil lebih lama karena sifatnya yang selalu mengambang dan Anda mendapat jawaban yang benar!__builtin__.abs()
diterapkan dengan sukses?__abs__
metode ajaibEdit: seperti yang disarankan @aix, cara yang lebih baik (lebih adil) untuk membandingkan perbedaan kecepatan:
Jadi tampaknya
abs()
hanya memiliki sedikit keunggulan kecepatan dibandingkanfabs()
bilangan bulat. Untuk pelampung,abs()
danfabs()
menunjukkan kecepatan yang sama.Selain apa yang dikatakan @aix, satu hal lagi yang perlu dipertimbangkan adalah perbedaan kecepatan:
Jadi
abs()
lebih cepat darimath.fabs()
.sumber
from math import fabs
dengan pasti, dan coba-5.0
untuk keduanya.math.fabs()
selalu mengembalikan float, sementaraabs()
mungkin mengembalikan integer.sumber
abs
dapat mengembalikan tipe apa pun, bergantung pada__abs__
metode khusus dari tipe yang dipanggil.abs()
: Mengembalikan nilai absolut sesuai argumen, yaitu jika argumen int maka mengembalikan int, jika argumen mengambang, ia mengembalikan float. Juga bekerja pada variabel kompleks juga yaituabs(a+bj)
bekerja dan mengembalikan nilai absolut yaitumath.sqrt(((a)**2)+((b)**2)
math.fabs()
: Ini hanya bekerja pada nilai integer atau float. Selalu mengembalikan nilai float absolut apa pun tipe argumennya (kecuali untuk bilangan kompleks).sumber