Baiklah .. pertama-tama saya membutuhkan sesuatu yang melakukan apa yang ditanyakan oleh pertanyaan ini, tetapi saya membutuhkannya CEPAT! Sayangnya cara yang "lebih baik" adalah hampir 600 baris kode !!! Maafkan namanya yang tidak ada hubungannya dengan apa yang dilakukannya. Nama yang tepat adalah Integer64ToCharArray (nilai int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Jangan ragu untuk mencoba membersihkan kode itu tanpa mengganggu kinerja.
Input: Nilai 64 bit apa pun yang ditandatangani dari kisaran minimum hingga maksimum.
Contoh:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Keluaran:
Test: 9223372036854775807
Test: -9223372036854775808
Tes Kecepatan Asli: ( Integer64ToCharArray (); )
Nilai kasus 1 digit terbaik.
Loops: 100,000,000, Time Spent: 1,381 (Milli), Time Per Loop 13 (Nano)
Kasus Lebih Buruk Nilai 20 Digit.
Loop: 100.000.000, Waktu yang Dihabiskan: 22.656 (Mili), Waktu Per Loop 226 (Nano
Tes Kecepatan Desain Baru: ( AddDynamicallyToBuffer (); )
Nilai kasus 1 digit terbaik.
Loops: 100,000,000, Time Spent: 427 (Milli), Time Per Loop 4 (Nano)
Kasus Terburuk 32 Bit - Nilai 11 digit.
Loops: 100,000,000, Time Spent: 1,991 (Milli), Time Per Loop 19 (Nano)
Kasus Terburuk 1 Triliun Negatif - Nilai 14 digit.
Loops: 100,000,000, Time Spent: 5,681 (Milli), Time Per Loop 56 (Nano)
Kasus 64 Bit Lebih Buruk - Nilai 20 Digit.
Loops: 100,000,000, Time Spent: 13,148 (Milli), Time Per Loop 131 (Nano)
Bagaimana itu bekerja!
Kami Melakukan teknik Divide and Conquer dan setelah kami sekarang menjadi panjang maksimum string, kami cukup mengatur setiap nilai karakter secara individual. Seperti yang ditunjukkan dalam tes kecepatan di atas, panjang yang lebih besar mendapatkan penalti kinerja yang besar, tetapi masih jauh lebih cepat daripada metode loop asli dan tidak ada kode yang benar-benar berubah antara dua metode selain perulangan tidak lagi digunakan.
Dalam penggunaan saya maka nama saya mengembalikan offset sebagai gantinya dan saya tidak mengedit buffer array char, melainkan saya mulai memperbarui data vertex dan fungsi memiliki parameter tambahan untuk offset sehingga tidak diinisialisasi ke -1.