Anda bisa menggunakan floats, yang memiliki nilai yang mewakili tak terhingga.
Xeo
1
@jozefg - Oke, jadi ini bukan pemeriksaan yang dicari pengguna, hanya Max Valueimplementasi bahasanya.
keyboardP
4
@jozefg Ha, saya pikir Anda akan menerapkan A *. Saya sangat dekat!
Etienne de Martel
2
@jozefg - Itu masuk akal. Saya pikir OP ingin benar-benar melakukan a>bpemeriksaan :)
keyboardP
1
@ Hikari: Tidak, saya katakan bahwa tidak ada cara untuk merepresentasikan infinity dalam tipe integer. Anda dapat membuat kelas dengan operator yang kelebihan beban.
Keith Thompson
Jawaban:
130
Integer secara inheren terbatas. Yang paling dekat yang bisa Anda dapatkan adalah dengan menyetel ake intnilai maksimum:
#include<limits>// ...int a = std::numeric_limits<int>::max();
Yang akan menjadi 2^31 - 1(atau 2 147 483 647) jika int32 bit lebar pada implementasi Anda.
Jika Anda benar - benar membutuhkan angka tak terbatas, gunakan jenis angka titik mengambang, seperti floatatau double. Anda kemudian bisa mendapatkan infinity dengan:
double a = std::numeric_limits<double>::infinity();
Dan jika Anda benar - benar membutuhkan infinity sebagai int , tulis kelas pembungkus yang membebani operator perbandingan dan memiliki variabel boolean bernama "is_infinity".
@WTP Mengingat dia membutuhkan itu untuk implementasi algoritma Dijkstra, saya ragu itu akan diperlukan. Tapi itu pilihan yang paling masuk akal.
Etienne de Martel
4
Saya menambahkan komentar untuk pengunjung mendatang yang tidak menerapkan algoritma Dijkstra, tetapi membutuhkannya untuk hal lain. :)
Sepertinya kita punya calon lencana emas di sini. :) +1 untuk kalian berdua!
Mysticial
2
Perhatikan bahwa jika Anda menggunakan intsolusi, Anda harus sangat berhati-hati dengan aritmatika: menambahkan angka positif ke "tak terhingga" akan menghasilkan hasil yang sangat tidak terduga.
Lambda Fairy
67
Bilangan bulat itu terbatas, jadi sayangnya Anda tidak bisa menyetelnya menjadi tak terhingga. Bagaimanapun Anda dapat mengaturnya ke nilai maksimal dari sebuah int, ini berarti nilainya akan lebih besar atau sama dengan int lainnya, yaitu:
a>=b
selalu benar.
Anda akan melakukan ini dengan
#include<limits>//your code hereint a = std::numeric_limits<int>::max();//go off and lead a happy and productive life
Ini biasanya akan sama dengan 2.147.483.647
Jika Anda benar-benar membutuhkan nilai "tak terbatas" yang sebenarnya, Anda harus menggunakan double atau float. Kemudian Anda dapat melakukannya
float a = std::numeric_limits<float>::infinity();
Penjelasan tambahan tentang batas numerik dapat ditemukan di sini
Selamat Coding!
Catatan: Seperti yang disebutkan WTP, jika benar-benar diperlukan untuk memiliki int yang "tak terbatas" Anda harus menulis kelas pembungkus untuk int dan membebani operator pembanding, meskipun ini mungkin tidak diperlukan untuk sebagian besar proyek.
... dan jika Anda ingin menggunakan max()atau infinity()dalam template di mana tipe numeriknya tidak diketahui, Anda harus menggunakan +/-infinity()iff std::numeric_limits<T>::has_infinitydan sebaliknya min()danmax()
Ben Jackson
13
intsecara inheren terbatas; tidak ada nilai yang memenuhi kebutuhan Anda.
Jika Anda ingin mengubah jenis b, Anda dapat melakukan ini dengan penggantian operator:
float
s, yang memiliki nilai yang mewakili tak terhingga.Max Value
implementasi bahasanya.a>b
pemeriksaan :)Jawaban:
Integer secara inheren terbatas. Yang paling dekat yang bisa Anda dapatkan adalah dengan menyetel
a
keint
nilai maksimum:Yang akan menjadi
2^31 - 1
(atau2 147 483 647
) jikaint
32 bit lebar pada implementasi Anda.Jika Anda benar - benar membutuhkan angka tak terbatas, gunakan jenis angka titik mengambang, seperti
float
ataudouble
. Anda kemudian bisa mendapatkan infinity dengan:sumber
int
solusi, Anda harus sangat berhati-hati dengan aritmatika: menambahkan angka positif ke "tak terhingga" akan menghasilkan hasil yang sangat tidak terduga.Bilangan bulat itu terbatas, jadi sayangnya Anda tidak bisa menyetelnya menjadi tak terhingga. Bagaimanapun Anda dapat mengaturnya ke nilai maksimal dari sebuah int, ini berarti nilainya akan lebih besar atau sama dengan int lainnya, yaitu:
selalu benar.
Anda akan melakukan ini dengan
Ini biasanya akan sama dengan 2.147.483.647
Jika Anda benar-benar membutuhkan nilai "tak terbatas" yang sebenarnya, Anda harus menggunakan double atau float. Kemudian Anda dapat melakukannya
Penjelasan tambahan tentang batas numerik dapat ditemukan di sini
Selamat Coding!
Catatan: Seperti yang disebutkan WTP, jika benar-benar diperlukan untuk memiliki int yang "tak terbatas" Anda harus menulis kelas pembungkus untuk int dan membebani operator pembanding, meskipun ini mungkin tidak diperlukan untuk sebagian besar proyek.
sumber
max()
atauinfinity()
dalam template di mana tipe numeriknya tidak diketahui, Anda harus menggunakan+/-infinity()
iffstd::numeric_limits<T>::has_infinity
dan sebaliknyamin()
danmax()
int
secara inheren terbatas; tidak ada nilai yang memenuhi kebutuhan Anda.Jika Anda ingin mengubah jenis
b
, Anda dapat melakukan ini dengan penggantian operator:sumber
std::numeric_limits<float>::infinity()
.Ini adalah pesan untuk saya di masa depan:
Gunakan saja:
(unsigned)!((int)0)
Ini menciptakan kemungkinan nomor terbesar di mesin apa pun dengan menetapkan semua bit ke 1s (satu) dan kemudian melemparkannya ke unsigned
Bahkan lebih baik
Dan kemudian gunakan saja INF di kode Anda
sumber
#define INF ((unsigned) ~0)
, lihat di sini .Anda juga dapat menggunakan INT_MAX:
http://www.cplusplus.com/reference/climits/
itu setara dengan menggunakan numeric_limits.
sumber
int min dan nilai maks
Int -2,147,483,648 / 2,147,483,647 Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
saya kira Anda bisa mengatur menjadi sama dengan 9.223.372.036.854.775.807 tetapi itu harus menjadi int64
Jika Anda selalu ingin menjadi parutan itu mengapa Anda perlu memeriksanya? setel agar selalu benar
sumber
cstdint
).int
dan jenis terkait dalam C ++.