Hai teman-teman, untuk kelas saya, saya perlu membuat nomor akar kuadrat tetapi tidak berhasil !!
Tantangan:
Write a function or program that will "make a number square root".
Catatan: Ini adalah kode trolling. Berikan jawaban "berguna" untuk memandu programmer baru ini dalam perjalanannya menuju kesuksesan pemrograman! Jadilah kreatif!
Jawaban:
Jawa
Wow, ini masalah yang rumit. Saya belum pernah melakukan root kuadrat sebelumnya. Saya telah mengambil akar kuadrat, tetapi saya belum melakukannya. Jangan lupa untuk membuat kode Anda terlihat cantik untuk kredit tambahan di kelas Anda. Berikut kode yang membuat akar kuadrat dari angka yang dimasukkan:
Troll:
System.out.print
s tidak mencetak kejava.lang.System.out.print
. Mereka mencetak ke kelas batin. Dua yang pertama (yang seharusnya mencetak string) tidak melakukan apa-apa; yang kedua:100
) ?:0
. Gagal oleh loop tak terbatas ketika input negatif karena alasan yang sama gagal oleh loop tak terbatas ketika input0
.sumber
JFrame.DO_NOTHING_ON_CLOSE
dalam daftar troll ...setAlwaysOnTop(true)
juga.C ++
Nah, jika Anda tidak memiliki rute yang lebih baik, selalu ada solusi brute-force:
Ini iterate melalui setiap nilai yang mungkin dari
double
(denganunion
itu denganlong long
yang dari ukuran bit yang sama, karena tidak ada cara yang baik untuk benar-benar iterate melalui mereka menggunakan ganda sebagai ganda aktual) sampai menemukan satu yang persegin
.sumber
double
dan along long
adalah hal paling menakutkan yang pernah saya lihat.union
perilaku tidak terdefinisi dan melakukan iterasi melalui dobel dimungkinkan dengan fungsistd::nextafter
std::nextafter
ada sebelum Anda hanya menyebutkannya kepada saya, jadi ya, itu diinginkan.double
nilai-nilai tidak dapat diproduksi dari mengalikanx*x
manax
adalahdouble
juga. Jadi pencarian tidak akan berhasil kadang-kadang (sebagian besar kali?), Memberikan NaN daripada hasil yang lebih benar.Python 3
Kode sederhana ini akan memberikan jawaban yang tepat :
sumber
Di Python 3 Anda dapat melakukan hal berikut:
sumber
Memperbaiki jawaban ini ,
Itu salah sekali. Semua orang tahu bahwa yang tercepat adalah ASM.
ASM x86_64 murni!
Tidak seperti jawaban terbelakang lainnya, jawaban ini memiliki kompleksitas O (1)!
Dan juga tidak seperti jawaban lain, ini 101% tepat, karena
sqrt(0.5)
memberi0.70710678118655
!sumber
PCMPEQQ
tidak lagi tampak oleh Anda sebagai "sampah ajaib yang tidak dapat dibaca yang dihasilkan oleh kompiler"Python
Jika diizinkan di kelas Anda, Anda dapat menggunakan perpustakaan matematika yang kompleks sebagai penolong di sini, instal dengan menjalankan perintah:
Maka Anda hanya akan menjalankan sesuatu seperti skrip python ini:
(Pastikan Anda menjalankannya dengan hak admin)
sumber
root
di Unixland).C
Jelas ini adalah cara terbaik. Ini secepat yang dapat Anda bayangkan dengan melihat kode. Menggunakan C, karena C paling cepat, dan masalah ini membutuhkan solusi cepat. Saya sudah menguji ini untuk nomor favorit saya, seperti 7, 13, dan 42, dan sepertinya berhasil.
sumber
results[number];
?C
Trik dan sihir akan membuatnya bekerja.
sumber
Python 3
Kalian salah melakukan semuanya. Siapa pun dapat melihat bahwa akar kuadrat dari 20 bukan 4.47213595499958, atau bahkan √20. Solusi ini memindahkan tugas sulit menghitung akar kuadrat ke modul yang dimaksudkan untuk tujuan ini.
Salah satu modul tersebut adalah sympy, yang menyediakan matematika akar kuadrat. Tidak seperti solusi lain di sini, itu benar-benar melakukan segalanya dengan benar. Bahkan mengasumsikan bahwa sqrt (-1) adalah I - tidak ada solusi di sini yang bisa menyelesaikannya.
Dan di sini adalah kode modular, seperti itulah tampilan program yang bagus. Fungsi harus sekecil mungkin, jika tidak, itu berarti Anda menulis program yang buruk. Selain itu, program harus memiliki banyak komentar.
Dan berikut ini contoh program yang berfungsi.
sumber
print_format_prompt_with_thing_to_specify_get_default_prompt_format_to_getattr_get_sys_name_from_get_stdout_name_and_print_square_root_of_read_from_stdin_and_print_get_string_from_get_newline_to_getattr_get_sys_name_from_get_stdout_name
.JavaScript
Sayangnya, JavaScript tidak mendukung simbol akar kuadrat untuk nama fungsi. Sebagai gantinya, kita dapat menggunakan beberapa karakter alfabet Unicode lainnya untuk mewakili fungsi akar kuadrat.
Dalam contoh ini saya akan gunakan
ᕂ
.Setelah kita memiliki simbol yang valid untuk digunakan, kita dapat menggunakan objek Math untuk menghasilkan fungsi root kuadrat.
Itu mudah! :)
sumber
Julia
Jelas cara terbaik untuk melakukannya, dengan menggunakan root Series kuadrat Taylor:
Itu sebenarnya menghasilkan nilai yang sangat tepat:
Tapi tentu saja ini seperti sebuah aproximation (dan juga menjadi seri konvergen) tidak berguna untuk nilai-nilai yang tidak mendekati 1:
sumber
a^2
(n kali) dan kalikan dengana
(n kali) jawabannya (sqrt(x)~a^n*sqroot(x/a^2n)
) x-> 0 (jika a> 0) tidak ke 1 (memberi kesalahan besar). Juga jika x / a ^ 2n ~ 1 angkaa!=x
dann
akan berubah untuk sewenang-wenangx
untuk mendapatkan presisi yang diinginkan (membuat menjengkelkan dan memakan waktu untuk menemukannya).Getah
Solusi untuk ini cukup sulit dan sangat kompleks, jadi ambil kopi Anda. Masalahnya adalah, itu tergantung pada nomor apa yang Anda inginkan kuadrat dari kode berubah secara signifikan. Saya akan tunjukkan masalahnya. Katakanlah itu
9
nomor Anda. Maka kode akan terlihat seperti ini:Sekarang katakanlah itu
1234321
nomor Anda, lihat kode:Terakhir namun tak kalah penting katakanlah nomor Anda
0
.Cara yang baik untuk menyelesaikan ini adalah dengan menulis sebuah program di
Ook!
atauPiet
, yang ingin nomor Anda dan hasilkanLaTeX-sqrt-code
untuk itu. Berikut ini adalah contoh yang sangat sederhanaOok!
, karena hanya dapat membaca satu byte dan tidak memeriksa apakah byte ini adalah nomor yang sah atau tidak, tapi saya pikir Anda akan langsung ke intinya.Sama untuk
Piet
:Ini akan menjadi cara yang paling efisien. Saya juga menyarankan untuk menggunakan
Piet
karena setiap kali karya seni yang indah, sehingga hal-hal tidak cepat membosankan.sumber
Haskell
Saya berhenti memercayai komputer ketika saya pertama kali mendengar tentang kesalahan floating-point. Maksudku, serius, jika bahkan Google tidak bisa mengendalikan mereka , lalu siapa yang bisa?
Jadi taruhan terbaik kami adalah menemukan solusi yang hanya melibatkan bilangan bulat. Untungnya itu mudah karena kita bisa memeriksa semua angka, karena setiap interval [1..n] hanya berisi jumlah yang terbatas, tidak seperti real alfa-1 omong kosong. Berikut ini contoh implementasi di Haskell:
Bekerja seperti jimat, lihat:
Akurasi harus cukup untuk sebagian besar aplikasi.
sumber
double
s dan DDG menggunakantriple
s.Jawa
Cara paling tepat untuk melakukan ini adalah untuk beralih. Pertama, loop by
integer
s sampai Anda melewati target, lalu beralih kedouble
s. Metode ini memiliki keuntungan tepat , tidak seperti metode "estimasi" lain yang mungkin Anda lihat. Anda mengorbankan sedikit kecepatan, tetapi untuk sebagian besar aplikasi, inilah yang Anda butuhkan.Anda dapat mengubah jawaban ini tergantung pada seberapa tepat Anda perlu, tetapi ini harus bekerja setidaknya untuk satu miliar:
sumber
0.000000001
adalah bahwa itu rawan kesalahan pembulatan. Saya telah membuat solusi yang lebih tepat di C ++.Math.nextUp(root)
bukan+0.000000001
? Itu akan memakan waktu lebih lama ... dan dijamin akan berhasil.Double
dan terkejut ketika saya tidak bisa menemukannya. Tidak berpikir untuk melihat ke dalamMath
, tetapi ini bekerja dengan cukup baik. Saya belum "gagal" pada apa pun.Javascript
Konstanta ajaib ini dapat digunakan untuk menghitung akar kuadrat dari angka menggunakan alfabet:
Tes:
Tampaknya bekerja dengan cukup baik. Saya ingin tahu apakah ada cara yang lebih pendek?
sumber
JavaScript
Masalah yang sangat sulit!
Tidak ada fungsi bawaan untuk itu dalam JavaScript ...
Sepertinya pekerjaan untuk pemecah Newton-Raphson.
Sekarang kamu bisa menggunakannya
Math.sqrt
sumber
JavaScript / ActionScript
Tidak ada cara untuk secara langsung menghitung akar kuadrat dalam ActionScript atau JavaScript, namun, ada solusinya. Anda bisa mendapatkan akar kuadrat dari angka dengan menaikkannya ke
1/2
daya.Ini adalah tampilannya di JavaScript dan ActionScript 2:
Dan meskipun fungsinya bekerja dengan baik di ActionScript 3, saya akan merekomendasikan menggunakan variabel yang diketik dan mengembalikan nilai untuk kejelasan dan keandalan:
Troll itu:
sumber
1/2 == 0
.Python 2.7
Penjelasan
Mengutip
Wikipedia - Root kuadrat
Dalam matematika, akar kuadrat dari angka a adalah angka y sedemikian rupa sehingga y 2 = a
Dengan kata lain setiap angka adalah akar kuadrat dari beberapa angka lainnya.
Catatan
Pertanyaan ini bagi saya terlihat mirip dengan teka-teki terkenal Bagaimana membuat garis lebih pendek tanpa menggosok atau memotongnya
sumber
PHP (dan lainnya):
Karena cara yang dijelaskan pertanyaan itu tidak berarti bahwa kita benar-benar perlu menghitungnya, inilah solusi saya:
Ini menyediakan cara untuk menghitung secara akurat akar kuadrat dalam berbagai bahasa.
Daftar bahasa dapat diperluas.
Nilai dapat dikirim melalui POST, DAPATKAN, cookie atau bahkan disimpan dalam sesi.
Jika Anda hanya memberikan nomornya, ia menjadi bingung dan memberikan hasil yang dihitung, yang berlaku untuk (hampir) SETIAP bahasa!
sumber
C
Ini lebih baik daripada semua 27 jawaban lain karena semuanya tidak akurat. Itu benar, mereka hanya memberikan satu jawaban ketika seharusnya ada 2. Yang ini bahkan tidak mencoba menjawab jika itu akan salah, itu hanya menyerah dan berputar-putar.
Kode-trolling:
for
penyalahgunaan lingkaran#define
gunakan untukmeningkatkanpenurunan keterbacaan√1024
mengembalikan3√1024 = ∓32
, yang hanya salah)sumber
#define the number
... bagus! Saya menyukai alasan Anda tentang kondisi untuk menunjukkan pesan penggunaan, khususnya.C ++
berdasarkan http://en.wikipedia.org/wiki/Fast_inverse_square_root dan jawaban @ snack.
Kecuali alih-alih lari pada cara untuk mengubah x ^ (- 0,5) menjadi x ^ (0,5) saya memodifikasi algoritma untuk melakukannya secara langsung.
ALGORITMA
Berikan angka floating point (dalam hal ini double) ke integer (dalam hal ini panjang).
Beberapa bit pertama dari angka floating point adalah eksponen: yaitu, nomor tersebut disimpan sebagai 2 ^ AAA * 1.BBBBBBBB. Jadi lakukan pergeseran hak dan eksponen ini dibelah dua.
Dalam akar kuadrat terbalik asli , angka ini dikurangkan dari konstanta untuk memberikan kebalikan. Saya hanya menambahkannya ke konstanta, karena saya ingin akar kuadrat secara langsung. Nilai konstanta dipilih untuk memberikan jawaban yang merupakan perkiraan terbaik untuk nilai yang diinginkan.
Masukkan nomor kembali ke titik apung.
Secara opsional, satu atau dua iterasi metode Newton dapat digunakan untuk meningkatkan hasilnya, tetapi saya tidak repot, karena saya ingin melihat seberapa dekat saya bisa mendapatkan tanpa.
Konstanta yang digunakan terlihat sangat misterius, tetapi di luar beberapa digit pertama, nilainya tidak kritis. Saya menemukan konstanta dengan coba-coba. Saya berhenti begitu mendapat nilai yang terkadang diremehkan dan terkadang terlalu tinggi.
Hasil
Pengecoran hanya diperlukan karena C tidak akan memungkinkan Anda untuk melakukan operasi bitshift pada float, jadi satu-satunya operasi nyata adalah bitshift dan penambahan. Saya belum pernah menggunakan iterasi tunggal dari metode Newton untuk meningkatkan hasilnya, jadi ketepatannya luar biasa. Guru OP akan terkesan dengan kecepatan metode yang (sejujurnya) cukup akurat untuk banyak tujuan!
sumber
10
* 1.000
, sqrt (4) = 2 ^01
* 1.000
= 2, sqrt (2) = 2 ^00
* 1.100
= 1,5. Jadi1
bit yang bergeser dari eksponen memberikan mantissa 1,5, yang tidak jauh dari nilai sebenarnya dari sqrt (2) yaitu sekitar 1,4. Tetapi tidak tahu bagaimana itu secara konsisten memberikan jawaban dengan akurasi lebih baik dari 3%.E
Catatan: ini hanya berfungsi di komputer saya, karena perangkat keras yang mendasarinya tidak menyimpan angka dalam biner tetapi dalam basis e, sedemikian rupa sehingga apa yang tampak
10
mewakili e,100
mewakili e e , dan sebagainya. Dengan cara ini, apa yang Anda mungkin pada mesin biner panggilan sedikit-bergeser ke kiri melakukan x => e x , dan apa yang Anda mungkin pada mesin biner panggilan sedikit-bergeser ke kanan melakukan x => ln x. Jelas, sulit untuk mewakili angka yang mendasarinya pada media internet biner-sentris yang sangat terbatas ini, tetapi saya melakukan yang terbaik.Sintaks E sangat mirip dengan C / C ++, jadi ini seharusnya mudah bagi kebanyakan orang untuk mengerti.
sumber
n >> 1
tidak sama denganlog(n)
.JavaScript / HTML / CSS
Saya berpikir tentang menggunakan jQuery dan id untuk sedikit lebih troll, tapi saya lebih suka vanilla js.
Hasilnya tidak sepenuhnya tepat, tetapi berhasil!
sumber
GeoGebra
Baca nilai jawaban Anda dari sumbu koordinat.
Cobalah online di sini (memerlukan Java), atau nikmati beberapa tangkapan layar di bawah ini:
sumber
100% bash murni (berbasis integer)
Dengan presentasi ascii-art:
Kotak akar yang sempurna ini harus bersumber di bash dengan menggunakan
source
perintahLama (versi ini dapat dengan mudah disisipkan ke terminal konsol mana saja)
Akan bekerja seperti:
Harap dicatat: Rootnya adalah persegi !!
sumber
Jawa
Terima kasih, untuk ggmx tentang kode untuk menghasilkan n digit pi di java .
Tidak merasa ingin menerapkan input. Untuk menguji perubahan kode
sqrtThis
danexpectedPercision
.Berikut adalah cara kerjanya. Pertama, mendapatkan root sqrt untuk integer adalah sepele jadi saya tidak merasa ingin mengimplementasikannya dan sebagai gantinya digunakan javas yang dibangun dalam sqrt fcn. Sisa kode 100% sah.
Ide dasar,
karena pi adalah bilangan desimal panjang non-berulang tak terhingga semua urutan angka harus terjadi di dalamnya(baca edit). Karenanya jawaban Anda ada di dalam pi !! Karena itu kami hanya dapat menerapkan pencarian regex pada pi mencari jawaban Anda. Jika kami tidak dapat menemukan jawaban yang baik maka kami hanya akan menggandakan ukuran pi yang kami cari!Ini sangat mudah, bahkan orang dapat mengatakan bahwa itu semudah pi :)
Sunting
Pi belum terbukti mengandung setiap urutan angka hingga di dalamnya. Fakta bahwa pi tidak terbatas dan tidak berulang bukanlah bukti yang cukup untuk pernyataan seperti yang dibuktikan oleh Exelian. Namun banyak ahli matematika percaya pi berisi setiap urutan bilangan terbatas.
sumber
JQuery
ini adalah yang paling akurat (bonus: juga berfungsi untuk surat!)
Ini biola
sumber
document.write
counter cukup.C ++
Ini pada akhirnya akan memberi Anda akar kuadrat.
Saya memperbaiki kode untuk mencerminkan pertanyaan dengan lebih baik. Terima kasih atas saran Anda ... kode diperbarui.
sumber
x+=1e-16
?DBL_EPSILON
,.Python
Solusi ini:
Spoiler:
Kode:
sumber
C ++
Pertanyaan Anda tidak dikompilasi karena Anda meletakkan! pada akhirnya. C ++ tidak suka!
Di sini pertanyaan yang tepat untuk kompiler:
Oh .. dan file make.
dan 26317.def. Ini seharusnya sudah ada di kompiler Anda
Yap, seseorang dapat menggunakan -E untuk menampilkan jawaban preprocess yang benar, tetapi jika Anda tahu -E Anda juga tahu bagaimana cara squareroot. : P Di sini beberapa preprocessed. Solusi minimal yang sangat buruk, tidak ada cek terikat, tidak ada prompt. TIL trigraph itu diproses sebelumnya.
sumber