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

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1:
==Класс Bignum < Integer==
Классу <tt>Bignum</tt> принадлежат целые числа, которые не умещаются в диапазон класса [[Ruby/Справочник/Fixnum|Fixnum]].
Bignum objects hold integers outside the range of Fixnum. Bignum objects are created automatically when integer calculations would otherwise overflow a Fixnum. When a calculation involving Bignum objects returns a result that will fit in a Fixnum, the result is automatically converted.
Объекты класса <tt>Bignum</tt> создаются автоматически, когда результат вычислений превышает (по модулю) предельное значение класса [[Ruby/Справочник/Fixnum|Fixnum]]. Когда, в результате вычислений, объект класса <tt>Bignum</tt> уменьшается настолько, что его значение можно хранить в объекте класса [[Ruby/Справочник/Fixnum|Fixnum]], то он автоматически преобразуется в [[Ruby/Справочник/Fixnum|Fixnum]].
For the purposes of the bitwise operations and <tt>[]</tt>, a Bignum is treated as if it were an infinite-length bitstring with 2's complement representation.
Для обеспечения работы побитовых операций и метода [[#Bignum#%5B%5D|[]]], объект класса <tt>Bignum</tt> следует рассматривать как двоичную последовательность бесконечной длины.
While Fixnum values are immediate, Bignum objects are not---assignment and parameter passing work with references to objects, not the objects themselves.
В отличие от [[Ruby/Справочник/Fixnum|Fixnum]], объекты класса <tt>Bignum</tt> передаются не непосредственно, а по ссылке.
----
 
'''Методы объекта'''
 
[[#Bignum#%5B%5D|[]]], [[#Bignum#%|%]], [[#Bignum#&amp;|&amp;]], [[#Bignum#**|**]], [[#Bignum#**|**]], [[#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#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#%===
----
<ttsource lang=ruby>big % other =&gt;#-> Numericnumeric
big.modulo(other) =&gt;#-> Numericnumeric</ttsource>
----
Возвращает остаток от деления числа ''big'' на число''other''.
Returns big modulo other. See Numeric.divmod for more information.
<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 <ttlang=ruby>big &amp; numeric =&gt;#-> integer</ttsource>
----
Побитовое <tt>И</tt>.
Performs bitwise <tt>and</tt> between <i>big</i> and <i>numeric</i>.
===Bignum#*===
----
<ttsource lang=ruby>big * other =&gt;#-> Numericnumeric</ttsource>
----
Умножает число ''big'' на число ''other'' и возвращает результат.
Multiplies big and other, returning the result.
<source lang=ruby>1234567890 * 2 #-> 2469135780
1234567890 * 1.2 #-> 1481481468.0
1234567890 * -2 #-> -2469135780</source>
{{Похожие методы|Bignum|**|+|-|/|%}}
===Bignum#**===
----
<ttsource lang=ruby>big ** exponentother #=&gt;-> numeric</tt>
big.rpower(other) #-> numeric</source>
----
Возводит число ''big'' в степень ''other'' (которая может быть целым, дробным или любым другим числом). Результат может быть класса [[Ruby/Справочник/Fixnum|Fixnum]], <tt>Bignum</tt> или [[Ruby/Справочник/Float|Float]].
Raises <i>big</i> to the <i>exponent</i> power (which may be an integer, float, or anything that will coerce to a number). The result may be a Fixnum, Bignum, or Float
<codesource lang=ruby>123456789 ** 2 #=&gt;-> 15241578750190521
123456789 ** 1.2 #=-> 5126464716.09932
123456789 ** -2 #=-> 6.5610001194102e-17</codesource>
{{Похожие методы|Bignum|*|+|-|/|%|power!}}
 
{{Идентичные методы|Bignum|**|rpower}}
(еще известен как power!)
===Bignum#**===
----
<tt>big ** exponent #=&gt; numeric</tt>
----
Raises <i>big</i> to the <i>exponent</i> power (which may be an integer, float, or anything that will coerce to a number). The result may be a Fixnum, Bignum, or Float
<code>123456789 ** 2 #=&gt; 15241578750190521
123456789 ** 1.2 #=> 5126464716.09932
123456789 ** -2 #=> 6.5610001194102e-17</code>
 
(еще известен как power!)
===Bignum#+===
----
<ttsource lang=ruby>big + other =&gt;#-> Numericnumeric</ttsource>
----
Складывает число ''big'' с числом ''other'' и возвращает результат.
Adds big and other, returning the result.
<source lang=ruby>1234567890 + 2 #-> 1234567892
1234567890 + 1.2 #-> 1234567891.2
1234567890 + (-2) #-> 1234567888</source>
{{Похожие методы|Bignum|**|*|-|/|%}}
===Bignum#-===
----
<ttsource lang=ruby>big - other =&gt;#-> Numericnumeric</ttsource>
----
Вычитает из числа ''big'' число ''other'' и возвращает результат.
Subtracts other from big, returning the result.
<source lang=ruby>1234567890 - 2 #-> 1234567888
1234567890 - 1.2 #-> 1234567888.8
1234567890 - (-2) #-> 1234567892</source>
{{Похожие методы|Bignum|**|+|*|/|%}}
===Bignum#-@===
----
<ttsource lang=ruby>-big =&gt;#-> other_big</ttsource>
----
Унарный минус (возвращает новый объект класса <tt>Bignum</tt>, значение которого равно 0-''big'')
Unary minus (returns a new Bignum whose value is 0-big)
===Bignum#/===
----
<source lang=ruby>big / other #-> numeric
<tt>/(p1)</tt>
big.div(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и возвращает результат.
Alias for #quo
<source lang=ruby>1234567890 / 2 #-> 617283945
===Bignum#/===
1234567890 / 1.2 #-> 1028806575.0
----
1234567890 / (-2) #-> -617283945</source>
<tt>/(p1)</tt>
{{Похожие методы|Bignum|**|*|-|+|%|quo|rdiv}}
----
{{Идентичные методы|Bignum|/|div}}
Alias for #quo
===Bignum#<<===
----
<ttsource lang=ruby>big &lt;&lt;<< numeric =&gt;#-> integer</ttsource>
----
Побитовый сдвиг числа ''big'' влево на ''numeric'' позиций (вправо, если ''numeric'' меньше нуля).
Shifts big left <i>numeric</i> positions (right if <i>numeric</i> is negative).
{{Похожие методы|Bignum|>>}}
===Bignum#<=>===
----
<ttsource lang=ruby>big &lt;<=&gt;> numeric =&gt;#-> -1, 0, +1</ttsource>
----
Сравнение -- возвращает -1, 0 или +1, если значение числа ''big'' меньше, равно или больше значения числа ''numeric'', соотвественно. Это базис для тестов в примеси [[Ruby/Справочник/Comparable|Comparable]].
Comparison---Returns -1, 0, or +1 depending on whether <i>big</i> is less than, equal to, or greater than <i>numeric</i>. This is the basis for the tests in <tt>Comparable</tt>.
===Bignum#=====
----
<ttsource lang=ruby>big == obj =&gt;#-> true orили false</ttsource>
----
ReturnsВозвращает <tt>true</tt>, onlyесли ifчисло <i>''obj</i>'' hasимеет theтакое sameже valueзначение, что asи <i>число ''big</i>''. ContrastВ thisотличие withот <tt>метода [[#Bignum#eql?</tt>|eql?]], whichприводит requiresчисло <i>''obj</i> to'' beк aклассу <tt>Bignum</tt>.
<source <codelang=ruby>68719476736 == 68719476736.0 #=&gt;-> true</codesource>
===Bignum#>>===
----
<ttsource lang=ruby>big &gt;&gt;>> numeric =&gt;#-> integer</ttsource>
----
Побитовый сдвиг числа ''big'' вправо на ''numeric'' позиций (влево, если ''numeric'' меньше нуля).
Shifts big right <i>numeric</i> positions (left if <i>numeric</i> is negative).
{{Похожие методы|Bignum|<<}}
===Bignum#[]===
----
<ttsource lang=ruby>big[n] #-&gt;> 0, 1</ttsource>
----
Побитовый доступ -- возвращает ''n''ый бит (виртуальный) двоичного представления числа ''big'', где ''big''[0] -- младший значащий бит.
Bit Reference---Returns the <i>n</i>th bit in the (assumed) binary representation of <i>big</i>, where <i>big</i>[0] is the least significant bit.
<source <codelang=ruby>a = 9**15
50.downto(0) do |n|
print a[n]
end</codesource>
''результат'':
<i>produces:</i>
<codett>000101110110100000111000011110010100111100010111001</codett>
===Bignum#^===
----
<ttsource lang=ruby>big ^ numeric =&gt;#-> integer</ttsource>
----
Побитовое <tt>ИСКЛЮЧАЮЩЕЕ ИЛИ</tt>
Performs bitwise +exclusive or+ between <i>big</i> and <i>numeric</i>.
===Bignum#abs===
----
<ttsource lang=ruby>big.abs #-&gt;> aBignumbignum</ttsource>
----
Возвращает [[w:Абсолютное значение|абсолютное значение]] числа ''big''.
Returns the absolute value of <i>big</i>.
<codesource lang=ruby>-1234567890987654321.abs #=&gt;-> 1234567890987654321</codesource>
===Bignum#coerce===
----
<ttsource lang=ruby>big.coerce(p1other) #-> array</ttsource>
----
Возвращает массив, состоящий из чисел ''other'' и ''big'', которые преобразованы к классу <tt>Bignum</tt>.
MISSING: documentation
<source lang=ruby>
result = 1234567890.coerce( 1234 ) #-> [1234, 1234567890]
result[0] #-> 1234
result[0].class #-> Bignum</source>
===Bignum#div===
----
<ttsource lang=ruby>big / other =&gt;#-> Numericnumeric
big.div(other) =&gt;#-> Numericnumeric</ttsource>
----
Делит число ''big'' на число ''other'' и возвращает результат.
Divides big by other, returning the result.
<source lang=ruby>1234567890 / 2 #-> 617283945
1234567890 / 1.2 #-> 1028806575.0
1234567890 / (-2) #-> -617283945</source>
{{Похожие методы|Bignum|**|*|-|+|%|quo|rdiv}}
{{Идентичные методы|Bignum|/|div}}
===Bignum#divmod===
----
<ttsource lang=ruby>big.divmod(numeric) =&gt;#-> array</ttsource>
----
{{info|Полезно взглянуть в описание метода [[Ruby/Справочник/Numeric#Numeric#divmod|Numeric#divmod]] для получения более детальной информации}}
See <tt>Numeric#divmod</tt>.
===Bignum#eql?===
----
<ttsource lang=ruby>big.eql?(obj) =&gt;#-> true orили false</ttsource>
----
Возвращает <tt>true</tt>, если число ''obj'' имеет такое же значение, что и число ''big''. В отличие от метода [[#Bignum#==|==]], не занимается приведением типов.
Returns <tt>true</tt> only if <i>obj</i> is a <tt>Bignum</tt> with the same value as <i>big</i>. Contrast this with <tt>Bignum#==</tt>, which performs type conversions.
<source <codelang=ruby>68719476736.eql?(68719476736.0) #=&gt;-> false</codesource>
===Bignum#hash===
----
<ttsource lang=ruby>big.hash =&gt;#-> fixnum</ttsource>
----
Вычисляет [[w:Контрольная сумма|контрольную сумму]] на основе значения числа ''big''.
Compute a hash based on the value of <i>big</i>.
===Bignum#modulo===
----
<ttsource lang=ruby>big % other =&gt;#-> Numericnumeric
big.modulo(other) =&gt;#-> Numericnumeric</ttsource>
----
Возвращает остаток от деления числа ''big'' на число''other''.
Returns big modulo other. See Numeric.divmod for more information.
{{info|Полезно взглянуть в описание метода [[Ruby/Справочник/Numeric#Numeric#divmod|Numeric#divmod]] для получения более детальной информации}}
{{Идентичные методы|Bignum|%|modulo}}
{{Похожие методы|Bignum|**|+|-|/|*}}
===Bignum#power!===
----
<ttsource lang=ruby>big.power!(p1other) #-> numeric</ttsource>
----
Производит возведение числа ''fix'' в степень ''other''.
Alias for #**
<source lang=ruby>1234567890.power!( 2 ) #-> 1524157875019052100
1234567890.power!( -2 ) #-> 6.5610001194102e-019</source>
{{Похожие методы|Bignum|**|rpower}}
===Bignum#quo===
----
<ttsource lang=ruby>big.quo(other)</tt #-> numeric
big.rdiv(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и в качестве результата возвращает [[Ruby/Справочник/Rational|рациональное число]].
If Rational is defined, returns a Rational number instead of a Bignum.
<source lang=ruby>1234567890.quo(7) #-> Rational(1234567890, 7)</source>
===Bignum#quo===
{{Похожие методы|Bignum|/|div}}
----
{{Идентичные методы|Bignum|quo|rdiv}}
<tt>quo(other)</tt>
----
If Rational is defined, returns a Rational number instead of a Bignum.
===Bignum#rdiv===
----
<source lang=ruby>big.quo(other) #-> numeric
<tt>rdiv(p1)</tt>
big.rdiv(other) #-> numeric</source>
----
Делит число ''big'' на число ''other'' и в качестве результата возвращает [[Ruby/Справочник/Rational|рациональное число]].
Alias for #quo
<source lang=ruby>1234567890.rdiv(7) #-> Rational(1234567890, 7)</source>
{{Похожие методы|Bignum|/|div}}
{{Идентичные методы|Bignum|quo|rdiv}}
===Bignum#remainder===
----
<ttsource lang=ruby>big.remainder(numeric) =&gt;#-> number</ttsource>
----
Возвращает остаток от деления числа ''big'' на число ''numeric''.
Returns the remainder after dividing <i>big</i> by <i>numeric</i>.
<codesource lang=ruby>-1234567890987654321.remainder(13731) #=&gt;-> -6966
-1234567890987654321.remainder(13731.24) #=-> -9906.22531493148</codesource>
{{Похожие методы|Bignum|quo|rdiv|%|modulo}}
{{Внимание|Результат работы данного метода и методов % и modulo (которые по идее делают тоже самое) существенно отлючаются}}
===Bignum#rpower===
----
<source lang=ruby>big ** other #-> numeric
<tt>rpower(other)</tt>
big.rpower(other) #-> numeric</source>
----
Производит возведение числа ''big'' в степень ''other''. Возвращает [[Ruby/Справочник/Rational|рациональное число]], если результат рациональный (то есть, когда ''other'' < 0).
Returns a Rational number if the result is in fact rational (i.e. <tt>other</tt> &lt; 0).
<source lang=ruby>1234567890.power!( 2 ) #-> 1524157875019052100
 
1234567890.power!( -2 ) #-> Rational(1, 1524157875019052100)</source>
(еще известен как **)
{{Идентичные методы|Bignum|**|rpower}}
{{Похожие методы|Bignum|power!}}
===Bignum#size===
----
<ttsource lang=ruby>big.size #-&gt;> integer</ttsource>
----
Возвращает количество байт машинного представления числа ''big''.
Returns the number of bytes in the machine representation of <i>big</i>.
<codesource lang=ruby>(256**10 - 1).size #=&gt;-> 12
(256**20 - 1).size #=-> 20
(256**40 - 1).size #=-> 40</codesource>
===Bignum#to_f===
----
<ttsource lang=ruby>big.to_f #-&gt;> float</ttsource>
----
Преобразует число ''big'' в число класса [[Ruby/Справочник/Float|Float]]. Если число ''big'' не может быть преобразовано к классу [[Ruby/Справочник/Float|Float]], то возвращает [[w:Бесконечность|бесконечность]].
Converts <i>big</i> to a <tt>Float</tt>. If <i>big</i> doesn't fit in a <tt>Float</tt>, the result is infinity.
{{Похожие методы|Bignum|to_s}}
===Bignum#to_s===
----
<ttsource lang=ruby>big.to_s(base=10) =&gt;#-> string</ttsource>
----
Возвращает строку, где число ''big'' имеет основание системы счисления равное ''base'' (между 2 и 36). По умолчанию ''base''=10 (то есть десятичная система счисления).
Returns a string containing the representation of <i>big</i> radix <i>base</i> (2 through 36).
<source <codelang=ruby>12345654321.to_s #=&gt;-> &quot;"12345654321&quot;"
12345654321.to_s(2) #=-> "1011011111110110111011110000110001"
12345654321.to_s(8) #=-> "133766736061"
12345654321.to_s(16) #=-> "2dfdbbc31"
78546939656932.to_s(36) #=-> "rubyrules"</codesource>
{{Похожие методы|Bignum|to_f}}
===Bignum#|===
----
<ttsource lang=ruby>big | numeric =&gt;#-> integer</ttsource>
----
Побитовое <tt>ИЛИ</tt>.
Performs bitwise <tt>or</tt> between <i>big</i> and <i>numeric</i>.
===Bignum#~===
----
<ttsource lang=ruby>~big =&gt;#-> integer</ttsource>
----
Побитовое <tt>НЕ</tt>. Так как <tt>Bignum</tt> теоретически имеет бесконечную длину, то для вычисления результата берется число ''big'' на один бит длиннее старшего значащего бита (чтобы операция инверсии была обратимой).
Inverts the bits in big. As Bignums are conceptually infinite length, the result acts as if it had an infinite number of one bits to the left. In hex representations, this is displayed as two periods to the left of the digits.
<source lang=ruby>
<code>sprintf(&quot;%X&quot;, ~0x1122334455) #=&gt; &quot;..FEEDDCCBBAA&quot;</code>
sprintf("%X", ~0x499602d2) #-> "-499602d3"
~~1234567890 #-> 1234567890</source>