Ruby/Справочник/Bignum: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1:
Я считаю что [[Участник:Самохвалов|Cамохвалов]] тупой [[гомосексуал]]ист-педераст что [[Участник:Lvova|Анастасия Львова]] идиотка и она трахалась со [[Сталин]]ым и за это её ебали нацистские генералы [[Гитлер]]а ещё Самохвалова отъебли немцы-[[фашисты]] в немецком концлагере а потом отправили его в [[газенваген]]!
==Класс Bignum < Integer==
Классу <tt>Bignum</tt> принадлежат целые числа, которые не умещаются в диапазон класса [[Ruby/Справочник/Fixnum|Fixnum]].
Объекты класса <tt>Bignum</tt> создаются автоматически, когда результат вычислений превышает (по модулю) предельное значение класса [[Ruby/Справочник/Fixnum|Fixnum]]. Когда, в результате вычислений, объект класса <tt>Bignum</tt> уменьшается настолько, что его значение можно хранить в объекте класса [[Ruby/Справочник/Fixnum|Fixnum]], то он автоматически преобразуется в [[Ruby/Справочник/Fixnum|Fixnum]].
Для обеспечения работы побитовых операций и метода [[#Bignum#%5B%5D|[]]], объект класса <tt>Bignum</tt> следует рассматривать как двоичную последовательность бесконечной длины.
В отличие от [[Ruby/Справочник/Fixnum|Fixnum]], объекты класса <tt>Bignum</tt> передаются не непосредственно, а по ссылке.
----
 
'''Методы объекта'''
 
[[#Bignum#%5B%5D|[]]], [[#Bignum#%|%]], [[#Bignum#&amp;|&amp;]], [[#Bignum#**|**]], [[#Bignum#*|*]], [[#Bignum#+|+]], [[#Bignum#-@|-@]], [[#Bignum#-|-]], [[#Bignum#/|/]], [[#Bignum#&lt;&lt;|&lt;&lt;]], [[#Bignum#&lt;=&gt;|&lt;=&gt;]], [[#Bignum#==|==]], [[#Bignum#&gt;&gt;|&gt;&gt;]], [[#Bignum#^|^]], [[#Bignum#abs|abs]], [[#Bignum#coerce|coerce]], [[#Bignum#divmod|divmod]], [[#Bignum#div|div]], [[#Bignum#eql?|eql?]], [[#Bignum#hash|hash]], [[#Bignum#modulo|modulo]], [[#Bignum#power!|power!]], [[#Bignum#quo|quo]], [[#Bignum#rdiv|rdiv]], [[#Bignum#remainder|remainder]], [[#Bignum#rpower|rpower]], [[#Bignum#size|size]], [[#Bignum#to_f|to_f]], [[#Bignum#to_s|to_s]], [[#Bignum#|||]], [[#Bignum#~|~]]
===Bignum#%===
----
<source lang=ruby>big % other #-> numeric
big.modulo(other) #-> numeric</source>
----
Возвращает остаток от деления числа ''big'' на число''other''.
<source lang=ruby>1234567890 % 2 #-> 0
1234567890 % 1.2 #-> 4.56881898980299e-008
1234567890 % -2 #-> 0</source>
{{info|Полезно взглянуть в описание метода [[Ruby/Справочник/Numeric#Numeric#divmod|Numeric#divmod]] для получения более детальной информации}}
{{Идентичные методы|Bignum|%|modulo}}
{{Похожие методы|Bignum|**|+|-|/|*}}
===Bignum#&===
----
<source lang=ruby>big & numeric #-> integer</source>
----
Побитовое <tt>И</tt>.
===Bignum#*===
----
<source lang=ruby>big * other #-> numeric</source>
----
Умножает число ''big'' на число ''other'' и возвращает результат.
<source lang=ruby>1234567890 * 2 #-> 2469135780
1234567890 * 1.2 #-> 1481481468.0
1234567890 * -2 #-> -2469135780</source>
{{Похожие методы|Bignum|**|+|-|/|%}}
===Bignum#**===
----
<source lang=ruby>big ** other #-> numeric
big.rpower(other) #-> numeric</source>
----
Возводит число ''big'' в степень ''other'' (которая может быть целым, дробным или любым другим числом). Результат может быть класса [[Ruby/Справочник/Fixnum|Fixnum]], <tt>Bignum</tt> или [[Ruby/Справочник/Float|Float]].
<source lang=ruby>123456789 ** 2 #-> 15241578750190521
123456789 ** 1.2 #-> 5126464716.09932
123456789 ** -2 #-> 6.5610001194102e-17</source>
{{Похожие методы|Bignum|*|+|-|/|%|power!}}
{{Идентичные методы|Bignum|**|rpower}}
===Bignum#+===
----
<source lang=ruby>big + other #-> numeric</source>
----
Складывает число ''big'' с числом ''other'' и возвращает результат.
<source lang=ruby>1234567890 + 2 #-> 1234567892
1234567890 + 1.2 #-> 1234567891.2
1234567890 + (-2) #-> 1234567888</source>
{{Похожие методы|Bignum|**|*|-|/|%}}
===Bignum#-===
----
<source lang=ruby>big - other #-> numeric</source>
----
Вычитает из числа ''big'' число ''other'' и возвращает результат.
<source lang=ruby>1234567890 - 2 #-> 1234567888
1234567890 - 1.2 #-> 1234567888.8
1234567890 - (-2) #-> 1234567892</source>
{{Похожие методы|Bignum|**|+|*|/|%}}
===Bignum#-@===
----
<source lang=ruby>-big #-> other_big</source>
----
Унарный минус (возвращает новый объект класса <tt>Bignum</tt>, значение которого равно 0-''big'')
===Bignum#/===
----
<source lang=ruby>big / other #-> numeric
big.div(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и возвращает результат.
<source lang=ruby>1234567890 / 2 #-> 617283945
1234567890 / 1.2 #-> 1028806575.0
1234567890 / (-2) #-> -617283945</source>
{{Похожие методы|Bignum|**|*|-|+|%|quo|rdiv}}
{{Идентичные методы|Bignum|/|div}}
===Bignum#<<===
----
<source lang=ruby>big << numeric #-> integer</source>
----
Побитовый сдвиг числа ''big'' влево на ''numeric'' позиций (вправо, если ''numeric'' меньше нуля).
{{Похожие методы|Bignum|>>}}
===Bignum#<=>===
----
<source lang=ruby>big <=> numeric #-> -1, 0, +1</source>
----
Сравнение -- возвращает -1, 0 или +1, если значение числа ''big'' меньше, равно или больше значения числа ''numeric'', соотвественно. Это базис для тестов в примеси [[Ruby/Справочник/Comparable|Comparable]].
===Bignum#=====
----
<source lang=ruby>big == obj #-> true или false</source>
----
Возвращает <tt>true</tt>, если число ''obj'' имеет такое же значение, что и число ''big''. В отличие от метода [[#Bignum#eql?|eql?]], приводит число ''obj'' к классу <tt>Bignum</tt>.
<source lang=ruby>68719476736 == 68719476736.0 #-> true</source>
===Bignum#>>===
----
<source lang=ruby>big >> numeric #-> integer</source>
----
Побитовый сдвиг числа ''big'' вправо на ''numeric'' позиций (влево, если ''numeric'' меньше нуля).
{{Похожие методы|Bignum|<<}}
===Bignum#[]===
----
<source lang=ruby>big[n] #-> 0, 1</source>
----
Побитовый доступ -- возвращает ''n''ый бит (виртуальный) двоичного представления числа ''big'', где ''big''[0] -- младший значащий бит.
<source lang=ruby>a = 9**15
50.downto(0) do |n|
print a[n]
end</source>
''результат'':
<tt>000101110110100000111000011110010100111100010111001</tt>
===Bignum#^===
----
<source lang=ruby>big ^ numeric #-> integer</source>
----
Побитовое <tt>ИСКЛЮЧАЮЩЕЕ ИЛИ</tt>
===Bignum#abs===
----
<source lang=ruby>big.abs #-> bignum</source>
----
Возвращает [[w:Абсолютное значение|абсолютное значение]] числа ''big''.
<source lang=ruby>-1234567890987654321.abs #-> 1234567890987654321</source>
===Bignum#coerce===
----
<source lang=ruby>big.coerce(other) #-> array</source>
----
Возвращает массив, состоящий из чисел ''other'' и ''big'', которые преобразованы к классу <tt>Bignum</tt>.
<source lang=ruby>
result = 1234567890.coerce( 1234 ) #-> [1234, 1234567890]
result[0] #-> 1234
result[0].class #-> Bignum</source>
===Bignum#div===
----
<source lang=ruby>big / other #-> numeric
big.div(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и возвращает результат.
<source lang=ruby>1234567890 / 2 #-> 617283945
1234567890 / 1.2 #-> 1028806575.0
1234567890 / (-2) #-> -617283945</source>
{{Похожие методы|Bignum|**|*|-|+|%|quo|rdiv}}
{{Идентичные методы|Bignum|/|div}}
===Bignum#divmod===
----
<source lang=ruby>big.divmod(numeric) #-> array</source>
----
{{info|Полезно взглянуть в описание метода [[Ruby/Справочник/Numeric#Numeric#divmod|Numeric#divmod]] для получения более детальной информации}}
===Bignum#eql?===
----
<source lang=ruby>big.eql?(obj) #-> true или false</source>
----
Возвращает <tt>true</tt>, если число ''obj'' имеет такое же значение, что и число ''big''. В отличие от метода [[#Bignum#==|==]], не занимается приведением типов.
<source lang=ruby>68719476736.eql?(68719476736.0) #-> false</source>
===Bignum#hash===
----
<source lang=ruby>big.hash #-> fixnum</source>
----
Вычисляет [[w:Контрольная сумма|контрольную сумму]] на основе значения числа ''big''.
===Bignum#modulo===
----
<source lang=ruby>big % other #-> numeric
big.modulo(other) #-> numeric</source>
----
Возвращает остаток от деления числа ''big'' на число''other''.
{{info|Полезно взглянуть в описание метода [[Ruby/Справочник/Numeric#Numeric#divmod|Numeric#divmod]] для получения более детальной информации}}
{{Идентичные методы|Bignum|%|modulo}}
{{Похожие методы|Bignum|**|+|-|/|*}}
===Bignum#power!===
----
<source lang=ruby>big.power!(other) #-> numeric</source>
----
Производит возведение числа ''fix'' в степень ''other''.
<source lang=ruby>1234567890.power!( 2 ) #-> 1524157875019052100
1234567890.power!( -2 ) #-> 6.5610001194102e-019</source>
{{Похожие методы|Bignum|**|rpower}}
===Bignum#quo===
----
<source lang=ruby>big.quo(other) #-> numeric
big.rdiv(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и в качестве результата возвращает [[Ruby/Справочник/Rational|рациональное число]].
<source lang=ruby>1234567890.quo(7) #-> Rational(1234567890, 7)</source>
{{Похожие методы|Bignum|/|div}}
{{Идентичные методы|Bignum|quo|rdiv}}
===Bignum#rdiv===
----
<source lang=ruby>big.quo(other) #-> numeric
big.rdiv(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и в качестве результата возвращает [[Ruby/Справочник/Rational|рациональное число]].
<source lang=ruby>1234567890.rdiv(7) #-> Rational(1234567890, 7)</source>
{{Похожие методы|Bignum|/|div}}
{{Идентичные методы|Bignum|quo|rdiv}}
===Bignum#remainder===
----
<source lang=ruby>big.remainder(numeric) #-> number</source>
----
Возвращает остаток от деления числа ''big'' на число ''numeric''.
<source lang=ruby>-1234567890987654321.remainder(13731) #-> -6966
-1234567890987654321.remainder(13731.24) #-> -9906.22531493148</source>
{{Похожие методы|Bignum|quo|rdiv|%|modulo}}
{{Внимание|Результат работы данного метода и методов % и modulo (которые по идее делают тоже самое) существенно отлючаются}}
===Bignum#rpower===
----
<source lang=ruby>big ** other #-> numeric
big.rpower(other) #-> numeric</source>
----
Производит возведение числа ''big'' в степень ''other''. Возвращает [[Ruby/Справочник/Rational|рациональное число]], если результат рациональный (то есть, когда ''other'' < 0).
<source lang=ruby>1234567890.power!( 2 ) #-> 1524157875019052100
1234567890.power!( -2 ) #-> Rational(1, 1524157875019052100)</source>
{{Идентичные методы|Bignum|**|rpower}}
{{Похожие методы|Bignum|power!}}
===Bignum#size===
----
<source lang=ruby>big.size #-> integer</source>
----
Возвращает количество байт машинного представления числа ''big''.
<source lang=ruby>(256**10 - 1).size #-> 12
(256**20 - 1).size #-> 20
(256**40 - 1).size #-> 40</source>
===Bignum#to_f===
----
<source lang=ruby>big.to_f #-> float</source>
----
Преобразует число ''big'' в число класса [[Ruby/Справочник/Float|Float]]. Если число ''big'' не может быть преобразовано к классу [[Ruby/Справочник/Float|Float]], то возвращает [[w:Бесконечность|бесконечность]].
{{Похожие методы|Bignum|to_s}}
===Bignum#to_s===
----
<source lang=ruby>big.to_s(base=10) #-> string</source>
----
Возвращает строку, где число ''big'' имеет основание системы счисления равное ''base'' (между 2 и 36). По умолчанию ''base''=10 (то есть десятичная система счисления).
<source lang=ruby>12345654321.to_s #-> "12345654321"
12345654321.to_s(2) #-> "1011011111110110111011110000110001"
12345654321.to_s(8) #-> "133766736061"
12345654321.to_s(16) #-> "2dfdbbc31"
78546939656932.to_s(36) #-> "rubyrules"</source>
{{Похожие методы|Bignum|to_f}}
===Bignum#|===
----
<source lang=ruby>big | numeric #-> integer</source>
----
Побитовое <tt>ИЛИ</tt>.
===Bignum#~===
----
<source lang=ruby>~big #-> integer</source>
----
Побитовое <tt>НЕ</tt>. Так как <tt>Bignum</tt> теоретически имеет бесконечную длину, то для вычисления результата берется число ''big'' на один бит длиннее старшего значащего бита (чтобы операция инверсии была обратимой).
<source lang=ruby>
sprintf("%X", ~0x499602d2) #-> "-499602d3"
~~1234567890 #-> 1234567890</source>