Terinspirasi oleh video ini oleh tecmath .
Perkiraan akar kuadrat dari angka apa pun x
dapat ditemukan dengan mengambil akar kuadrat bilangan bulat s
(yaitu bilangan bulat terbesar sehingga s * s ≤ x
) dan kemudian menghitung s + (x - s^2) / (2 * s)
. Mari kita sebut perkiraan ini S(x)
. (Catatan: ini setara dengan menerapkan satu langkah metode Newton-Raphson).
Meskipun ini memiliki kekhasan, di mana S (n ^ 2 - 1) akan selalu menjadi √ (n ^ 2), tetapi umumnya akan sangat akurat. Dalam beberapa kasus yang lebih besar, ini dapat memiliki akurasi> 99,99%.
Masukan dan keluaran
Anda akan mengambil satu nomor dalam format apa pun.
Contohnya
Format: Input -> Output
2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37 // actually 4.37 + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91 // actually 6.91 + 1/300
57 -> 7.57 // actually 7.57 + 1/700
2612 -> 51.10 // actually 51.10 + 2/255
643545345 -> 25368.19 // actually 25,368.19 + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481
Spesifikasi
Output Anda harus dibulatkan ke paling tidak seperseratus terdekat (mis. Jika jawabannya 47.2851, Anda dapat output 47.29)
Output Anda tidak harus memiliki nol dan titik desimal berikut jika jawabannya adalah bilangan bulat (mis. 125.00 dapat ditampilkan sebagai 125 dan 125.0, juga)
Anda tidak harus mendukung angka apa pun di bawah 1.
Anda tidak harus mendukung input non-integer. (mis. 1,52 dll ...)
Aturan
Celah Standar dilarang.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
sumber
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)
Jawaban:
Jelly ,
87 byte-1 byte berkat rumus matematika sederhana Olivier Grégoire - lihat jawaban Java mereka .
Cobalah online!
Bagaimana?
sumber
÷ƽ+ƽH
Pertama kali mencoba menggunakan Jelly jadi saya mungkin salah. Saya berharap saya tahu cara menyimpanƽ
, untuk tidak mengulanginya. Itu mungkin menghemat byte lain.ƽɓ÷⁹+H
tidak akan menghitung ulang akar integer, tetapi juga 7.ɓ
memulai rantai diad baru dengan argumen bertukar dan kemudian⁹
merujuk ke argumen kanan rantai itu (yaitu hasilƽ
).ƽɓ÷+⁹H
akan bekerja di sini juga.Haskell , 34 byte
Cobalah online!
Penjelasan dalam pseudocode imperatif:
sumber
Java (OpenJDK 8) , 32 byte
Cobalah online!
Penjelasan
Kode ini setara dengan ini:
Matematika di belakang:
sumber
Python 2 ,
47... 36 byte-3 byte berkat @JungHwanMin
-1 byte berkat @HyperNeutrino
-2 byte terima kasih kepada @JonathanFrech
-3 byte terima kasih kepada @ OlivierGrégoire
Cobalah online!
sumber
s+(x-s*s)/s/2
ke(x+s*s)/s/2
+.0
dan mengganti/s/2
dengan/2./s
, menghemat dua byte?MATL ,
129 byteCobalah online!
sumber
R,
43 byte,29 byteTerima kasih kepada @Giuseppe untuk persamaan baru dan bantuan dalam bermain golf sebesar 12 byte dengan solusi pembagian integer. Dengan menukar fungsi panggilan untuk memindai, saya bermain golf beberapa byte lagi.
Cobalah online!
sumber
f <-
untuk menetapkan fungsi. Tapi tetap saja, solusi yang bagus, pastikan Anda membaca Tips untuk bermain golf di R saat Anda mendapat kesempatan!APL (Dyalog) ,
2016 byteCobalah online!
sumber
JavaScript (ES7), 22 byte
Kami tidak benar-benar membutuhkan variabel perantara, jadi ini sebenarnya dapat ditulis ulang sebagai:
Uji kasus
Tampilkan cuplikan kode
sumber
C, 34 byte
Terima kasih kepada @Olivier Grégoire!
Hanya bekerja dengan
float
input.Cobalah online!
C,
413937 byteCobalah online!
C,
49474543 byteCobalah online!
Terima kasih kepada @JungHwan Min karena telah menghemat dua byte!
sumber
Haskell , 40 byte
Satu lagi bytes debu berkat H.PWiz.
Cobalah online!
sumber
AWK ,
47 4438 byteCobalah online!
CATATAN: Seperti TIO memiliki 2 byte tambahan untuk
\n
membuat output lebih cantik. :)Rasanya seperti curang sedikit untuk menggunakan sqrt untuk menemukan akar kuadrat, jadi di sini adalah versi dengan beberapa byte lagi yang tidak.
Cobalah online!
sumber
sqrt($1)
Anda dapat menggunakan$1^.5
\n
mendapatkan output, printf dalam awk tidak perlu tanda kurung dan rumus dapat disingkats/2+$1/s/2
, yang menghasilkan{s=int($1^.5);printf"%.2f",s/2+$1/s/2}
. Maaf jika komentar ini sepertinya tidak sopan.Raket , 92 byte
Terima kasih kepada @JungHwan Min atas tipnya di bagian komentar
Cobalah online!
Tidak disatukan
sumber
PowerShell , 54 byte
Cobalah online! atau Verifikasi beberapa kasus uji
Mengambil input
$x
dan kemudian melakukan apa yang diminta. Bagian|?
menemukan bilangan bulat maksimal yang, ketika kuadrat, adalah-l
ess-than-or-e
qual ke input$x
, maka kami melakukan perhitungan yang diperlukan. Output tersirat.sumber
Sekam , 9 byte
Cobalah online!
Masih ada sesuatu yang buruk dalam jawaban ini, tetapi sepertinya saya tidak dapat menemukan solusi yang lebih pendek.
Penjelasan
Saya menerapkan satu langkah algoritma Newton (yang memang setara dengan yang diusulkan dalam pertanyaan ini)
sumber
÷
Pyt ,
1110 bytePenjelasan
sumber
Bimasakti ,
1714 byte-3 byte dengan menggunakan rumus Olivier Grégoire
Cobalah online!
Penjelasan
sumber
C # (.NET Core) , 39 byte
Cobalah online!
Versi AC # dari jawaban Java Olivier Grégoire .
sumber