книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М
.pdfПредставление вещественных чисел в виде списка цифр
всистеме счисления с произвольным основанием: функция RealDigits
Как и функция IntegerDigits, функция RealDigits может использоваться для получения списка цифр в системе счисления, основание которой нужно указать вто рым параметром. Основание в таком случае может быть любым вещественным числом,
большим единицы.
R e a l D i g i t s [617.2857142857142857142857142857,2.5]
{ { 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 2 , 0 , 2 , 0 , 1 , 0 , 0 , 2 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 1 , 0 , 0 , 2 , 0,1,0,2,0,1,0},8}
Однако, при вызове функции RealDigits могут возникнуть осложнения в самых тривиальных, на первый взгляд, случаях. Дело в том, что параметры должны быть та кими, чтобы по ним функция RealDigits могла определить разрядность представле ния. Например, первый параметр должен быть вещественным числом, он не может быть записан даже в виде целого числа, если второй параметр задан как Pi.
RealDigits[1,Pi]
RealDigits::ndig
The number of digits to return cannot be determined. More...
RealDigits[1f n]
В этом случае первый параметр нужно задать как 1.0.
RealDigits [1.0, Pi]
{{ 1, 0 , 0 ,0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0},1} Вот еще один пример.
RealDigits [PiAE, Pi]
RealDigits::ndig x
The number of digits to return cannot be determined. More...
RealDigits[л€, л]
А вот сообщение, совсем “дикое” с точки зрения здравого смысла.
RealDigits [Pi, Pi]
RealDigits::ndig
The number of digits to return cannot be determined. More...
RealDigits[n,n]
Здесь уж точно можно определить, что нужны только две цифры! Правда, для этого нужно вникнуть в смысл выполняемой операции. Правда, функцию можно об мануть, но лишь с определенной точностью.
RealDigits [N[Pi, 2'5],Pi] |
0, 0, 0, 0,0,0, 0,0, 0,0,0, 0, 0,0, 0, 0,0, 0, 0,0, О, О, |
{{1,0,0,0, 0,0,0, 0 , 0 , 0 ,0 , 0 , |
|
о, 0, 0,0, 0, 0,0, 0, 0, 0, 0,0, 0, |
0,0,0}, 2} |
RealDigits [Pi, N [Pi, 25] ]
{{1/0,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О, о, о, 0,0,0, 0,0,0, 0, 0, 0, 0, 0, 0,0}, 2}
Второй способ обмана лучше.
RealDigits [Pi,N [Pi, 50] ]
{{1/0, О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О, О, О,О, О, О,О, 0 / 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О,О, О/о, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, 0, 0, 0,0}, 2}
Числа, их представление и операции над ними |
83 |
При первом же способе получим следующее.
RealDigits[N[Pi,50],Pi]
{ { 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , О,
О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О, О,
О,О,О,О,О,О,О,О,О,О,О,0,Indeterminate,Indeterminate,Indeterminate,
Indeterminate,Indeterminate,Indeterminate,Indeterminate,Indeterminate,
Indeterminate,Indeterminate,Indeterminate,Indeterminate,Indeterminate,
Indeterminate,Indeterminate,Indeterminate,Indeterminate,Indeterminate,
Indeterminate},2}
Здесь Indeterminate — это цифра, в которой функция не уверена.
Представление рациональных чисел в виде списка цифр всистеме счисления с произвольным основанием: функция RealDigits
Рациональные числа представляют собой конечные или периодические система™ ческие дроби. П оэтом у их представление в виде списка цифр в системе счисления произвольным основанием имеет некоторые особенности. Проиллюстрируем их н примерах. Пусть имеем рациональное число 9 9 /6 1 . О но представляется в виде перио дической десятичной дроби. Вот как м ож но вычислить ее начало.
nl= N[99/91,60] 1.08791208791208791208791208791208791208791208791208791208791
Теперь получим список цифр.
n2=RealDigits[N[99/91,60]]
{ { 1 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 , 2 , 0 , 8 , 7 , 9 , 1 1 , 1 }
Пока ничего удивительного. Но ведь список цифр можно получить и проще.
n3=RealDigits[99/91]
{{1,{0,8,7,9,1,2}},1}
Оказывается, в этом случае функция RealDigits соображает, что дробь получает ся периодическая, и находит ее период!
Интересно выполнить обратное преобразование, оно выполняется с помоиш функции FromDigits.
FromDigits[n2]
108791208791208791208791208791208791208791208791208791208791
100000000000000000000000000000000000000000000000000000000000
FromDigits[n3] _99
91
Как видите, если период дроби был выделен явно, обратное преобразование вы полняется точно!
Однако период может начинаться не сразу после десятичной точки, как в чиск периодических дробях, а после одной или нескольких цифр. В этом случае количе ство цифр до периода превышает количество цифр до десятичной точки. Рассмот рим пример.
nl=N[m,60]
61.7285714285714285714285714285714285714285714285714285714286
n2=RealDigits[nl]
{{6,1,7,2, 8,5, 7,1,4,2,8,5, 7,1,4,2,8, 5, 7,1,4,2, 8,5, 7, 1,4,2, 8,5, 7,1,4,2,
8 , 5 , 7 , 1 , 4 , 2 , 8 , 5 , 7 , 1 , 4 , 2 , 8 , 5 , 7 , 1 , 4 , 2 , 8 , 5 , 7 , 1 , 4 , 2 , 8 , 6 } , 2 }
84 |
Гпавь |
n3=RealDigits[m]
{{6,1/7,{2,8,5,7,1,4}},2}
Как видно из этого примера, других принципиальных отличий нет.
Получение заданного количества цифр вещественного числа
в системе счисления с произвольным основанием: функция RealDigits
Мы научились получать список цифр вещественного числа в системе счисления с произвольным основанием. При этом получаются списки цифр определенной длины, которая неявно определяется по параметрам функции RealDigits. Однако количество цифр можно явно указать в качестве третьего параметра функции RealDigits. Вот, на пример, 300 цифр числа к в системе счисления с основанием е (основание натураль ных логарифмов).
Итак, чтобы получить 1еп цифр вещественного числа х в системе счисления с осно ванием b, вызов функции RealDigits можно записать так: RealDigits [х, b, 1еп). Если 1еп больше Log [10, b] *Precision [х], то цифры, для которых не хватило точ ности, представляются как неопределенные (indeterminate).
Получение заданного количества цифр вещественного числа, начиная с цифры определенного разряда в системе счисления
с произвольным основанием: функция RealDigits
Если нужно получить 1еп цифр вещественного числа х в системе счисления с осно ванием b, начиная с разряда, который в позиционной системе счисления соответствует
множителю |
Ьп , то вызов функции RealDigits нужно записать так: RealDigits [х, |
|
b, 1еп, |
п). |
Например, чтобы вывести только цифры после точки, нужно положить |
п = - 1 . Вот еще более “насыщенный” пример. |
||
Do [Print[n," RealDigits[1234.567890,10, 10,n]],{n,-9,9}] |
||
-9 |
{{0,0, 0,0,0, 0, 0, 0,0,0 Ь -8} |
|
-8 |
{{0,0,0,0,0,0,0,0,0,0 Ь -7} |
|
-7 |
{{0,0,0,0,0,0,0,0,0,0 Ь -6} |
|
-6 |
{{0,0,0,0,0,0,0,0,0,0 },-5} |
|
-5 |
{{9,0,0,0,0,0,0,0,0,3 },-4} |
|
-4 |
{{8,9,0,0,0,0,0,0,0,0 },-3} |
|
-3 |
{{7,8,9,0,0,0,0,0,0,0 },-2} |
|
-2 |
{{6,7,8,9,0,0,0,0,0,0 },-1} |
|
-1 |
{{5,б,7,8,9,0,0,0,0,0 Ь 0} |
0{{4,5,6,7,8,9,0,0,0,0} ,1 }
1{{3,4,5,6,7,8,9,0,0,0} ,2 }
2{{2,3,4,5,6,7,8,9,0,01 ,3 }
3{{1,2,3,4,5,6,7,8,9,0} ,4 }
4{{0,1,2,3,4,5,6,7,8,91 ,5 }
5(10,0,1,2,3,4,5,6,7,9} ,6 }
6 {{0,0,0,1,2,3,4,5,6,81 ,7 }
Числа, их представление и операции над ними |
85 |
7{{О,О,О,0,1,2,3,4,5,7},8}
8{{О,О,О,О,0 , 1 , 2 , 3 , 4 , б }, 9}
9{{О,О,О,О,О,0,1,2,3,5},10}
Однако без дополнительных ухищрений получить вторую после точки тысячу зна ков десятичной дроби, приближающей основание натуральных логарифмов, нельзя.
RealDigits[Е,10,1000,-1001]
Floor::шергес Internal precision limit $MaxExtraPrecision 50.
reached while evaluating Floor [10000000 « 9 8 4 » 000000000 e] . More...
N::meprec Internal precision limit $MaxExtraPrecision = 5 0 . '
reached while evaluating 1000000000 « 9 8 0 » 00000000000 e - « 1 » .
More...
RealDigits::realx
The value 1000000000 « 9 8 0 » 00000000000 e- « 1 » is not a real number.
More...
RealDigits[e,10,1000, -1001]
Но даже если увеличить значение $MaxExtraPrecision, все равно ничего не по лучится (большая часть распечатки пропущена — она заменена троеточием).
Block[{$MaxExtraPrecision = 30000},RealDigits[Е, 10, 1000,-1001]]
( { 0 , 2 , 1 , 2 , 3 , 4 , 0 , 7 , 8 , 4 , 9 , 8 , 1 , 9 , 3 , 3 , 4 , 3 , 2 , 1 , 0 , б , 8 , 1 , 7 , 0 , 1 , 2 , 1 , 0 , 0 , 5 , б,2,
7.8.8.0. 2.3.5.1.9.3.0.3.3.2.2.4.7.4.5.0.1.5.8.5.3.9.0.4.7.3.0.4.1.9.9, 5, 7,7,7,7,0, 9, 3, 5,0,3, 6, 6, 0, 4,1, 6, 9, 9, 7,3,2,9, 7,2> 5,0, 8, 8, 6, 8,7, 6, 9,6, 6, 4,0,3,5, 5, 5,7,0, 7,1,6, 2,2, 6, 8, 4, 4,7,1,6, 2,5, б, 0, 7,9, 8,8,2, б, 5,1,7,8, 7.1.3.4.1.9.5.1.2.4.6.6.5.2.0. 1.0.3.0.5.9.2.1.2.3.6.6.7.7.1.9.4.3.2.5, 2.7.8, б, 7,5,3,9, 8,5,5,8, 9, 4,4,8, 9, б, 9,7,0, 9, б, 4,0, 9, 7,5, 4,5, 9,1,8,5, 6, 9, 5, б, 3,8, 0,2,3,6, 3,7,0,1,6,2,1,1,2,0,4, 7,7,4,2,7,2,2,8, 3,6, 4,8, 9, 6,1, 3.4.2.2.5.1.6, 4,4,5, 0, 7,8,1,8,2,4,4,2,3,5,2, 9, 4,8, 6, 3,6, 3,7,2,1,4,1,7,
4.0. 2.3.8.8.9.3.4.4.1.2.4.7.9.6.3.5.7.4.3.7.0.2.6.3 Indeterminate,Indeterminate,Indeterminate,Indeterminate, Indeterminate,
...Indeterminate, Indeterminate, Indeterminate, Indeterminate, Indeterminate,Indeterminate,Indeterminate,Indeterminate},-1000}
Но не думайте, что эта задача неразрешима, просто функцию RealDigits нужно применить к предварительно вычисленному приближению основания натуральны! логарифмов.
n=RealDigits[N[E,2010],10,1000,-1001]
{ { 0 , 2 , 1 , 2 , 3 , 4 , 0 , 7 , 8 , 4 , 9 , 8 , 1 , 9 , 3 , 3 , 4 , 3 , 2 , 1 , 0 , 6 , 8 , 1 , 7 , 0 , 1 , 2 , 1 , 0 , 0 , 5 , 6 , 2 ,
7.8, 8,0,2, 3,5,1,9, 3,0, 3,3,2,2, 4,7,4,5,0,1,5,8,5,3,9, 0, 4,7,3,0, 4,1,9,9, 5.7.7.7.7.0, 9, 3,5,0,3,6, 6, 0,4,1,6, 9, 9, 7,3,2, 9, 7,2,5, 0, 8, 8, б, 8,7, б, 9,6, 6, 4,0,3,5, 5, 5,7,0,7,1,6, 2,2, б, 8,4,4,7,1,6, 2,5, 6, 0,7, 9, 8, 8,2, 6, 5,1,7,8, 7,1,3,4,1,9, 5,1,2, 4, б,б, 5,2,0,1,0,3,0,5,9,2,1,2,3,6,6,7,7,1,9,4,3,2,5, 2,7, 8, б, 7,5,3,9, 8,5, 5, 8, 9, 4,4,8, 9, 6, 9, 7,0, 9, б, 4,0, 9, 7,5, 4,5, 9,1,8, 5,б, 9, 5, 6,3,8,0,2,3,6, 3,7, 0,1,6, 2,1,1,2,0, 4,7,7, 4,2,7,2,2,8,3,6, 4,8, 9, 6,1, 3.4.2.2.5.1.6, 4,4,5,0,7,8,1,8,2, 4,4,2,3,5,2, 9, 4,8, б, 3,6, 3,7,2,1,4,1,Л
4.0, 2, 3,8,8, 9, 3,4,4,1,2, 4,7, 9, 6,3,5, 7,4,3,7,0,2, б, 3,7, 5, 5,2, 9, 4,4,4,8,
3,3, 7,9, 9, 8 , 0 , 1 , 6 , 1 , 2,5, 4,9, 2,2,7, 8,5, 0, 9,2,5,7,7, 8,2,5, 6, 2,0, 9, 2, б,2,
2, 6, 4,8,3,2, 6,2,7,7,9, 3,3,3,8, б, 5, 6, 6, 4,8,1,6, 2,7, 7,2,5,1,6, 4,0,1,9,;, О, 5, 9,0,0, 4, 9,1,6, 4,4, 9, 9, 8,2, 8, 9, 3,1,5, 0, 5, б, 6, 0,4,7,2,5,8,0,2,7,7,8, 6, 3,1,8, б, 4,1,5, 5,1,9,5, 6, 5, 3 , 2 , 4 , 4,2,5,8, 6,9, 8,2,9, 4, б, 9, 5, 9,3,0,8,0, 1,9,1,5,2, 9, 8 , 7 , 2 , 1 , 1 , 7 , 2 , 5 , 5, б, 3,4,7, 5, 4, б, 3,9, б, 4,4,7, 9,1,0,1,4,5,9, О, 4,0, 9, 0, 5, 8, б, 2, 9, 8, 4,9, 6, 7, 9,1,2, 8, 7,4,0, 6, 8,7,0, 5, 0, 4,8, 9, 5, 8,5,8,
86 |
Главам |
6.7.1.7.4, 7.9.8, |
5, 4,6, 6, 7,7,5,7, |
5,7,3, 2.0. |
6,5,8,1,2, 8, 8,4,5, |
9 . 2 . 0 . 5.4, |
|||||
1.3.3.4.0, 5.3.9, |
2 . 2 . 0 . 0,0,1,1,3, |
7.8.6, |
3 . 0 . |
9,4,5,5,6,0, |
0 ,6 ,8 ,8.1.6, 6, 7, |
||||
4.0. |
09..1,8.6,4, |
2 . 0 . |
5.5,8 . 0 . |
4.30,.3.6, |
3,7,9, 5.3.7.6.4, 5.2.0, 3.0. 4.0.2, |
||||
4, 3 , 2 , 2 , 5, 6, 6, 1, |
3.5.2.7, 8,3,6,9, 5,1,1, |
7,7,8, 8, 3, 8, 6, 3, 8.7.4, 4.3.9.6.6, |
|||||||
2.5.3.2.2, 4,9,8, |
5.0. |
6.45,9,9,5, 8. 8. 6, |
2,3,4, |
2 , 8, 1, 8, 9, 9.7.0, 7.7.3.3.2, |
|||||
7,6,1,7,1, 7,8,3, |
9.2.8.0, 3.4.9.4, 6.5.0, 1.4.3, |
4.5.5.8.8, 9.7.0, 7.1.9.4.2, |
|||||||
5,8,6,3,9, 8.7.7, |
2,7,5,4, 7.1.0. 9,6,2,9, 5.3.7, |
4,1,5,2,1, 1.1.5, 1.3.6.8.3, |
|||||||
5,0,б,2,7, 5.2.6, |
0,2,3,2, 6.4.8.4, 7.2.8, 7.0. |
93,.2.0. 7.6,4.3.1, 0,0,5,9,5, |
|||||||
8,4,1,1, б, 6 , 1 , 2 , |
0,5,4,5, 2.9.7.0, 3.0. 2,3.6.4, |
7.2.5.4.9, 2.9.6, 6,6,9,3,8, |
|||||||
1.1.5.1.3, 7,3,2, |
2,7,5,3, 6, 4,*5>0, 9.8.8, 8.9.0, |
3.1.3.6.0, 2.0. |
7,2,4,8,1,5, |
7.6.5.8.5, 1.1.8,0, 6,3,0, 3.6.4.4, 2 , 8 , 1 , 2.3.1, 4.9.6.5.5, 0,7,0, 4.7.5.1.0, 2.5.4.4.6, 5,0,1, 1.7.2.7, 2.1.1.5, 5.5.1, 9.4.8, 6 . 6 . 8 . 5 . 0, 8 . 0 . 30,.6.8.5.3, 2,2,8,1,8, 3.1.5, 2, 1, 9, 6, 0, 0, 3, 7, 3, 5, 6, 2.5.2, 7.9.4.4.9, 5,1,5, 8.2.8.4.1, 8.8.2.9.4, 7.8.7, 6 . 1 . 0 . 8,5,2,6,3, 9.8.1, 4,0},- 1000}
Честно говоря, запятых здесь слишком много. Возникает соблазн избавиться от них следующим способом.
m=10A2000*FromDigits[п]
2123407849819334321068170121005627880235193033224745015853904730419957
7770935036604169973297250886876966403555707162268447162560798826517871
3419512466520103059212366771943252786753985589448969709640975459185695
6380236370162112047742722836489613422516445078182442352948636372141740
2388934412479635743702637552944483379980161254922785092577825620926226
4832627793338656648162772516401910590049164499828931505660472580277863
1864155195653244258698294695930801915298721172556347546396447910145904
0905862984967912874068705048958586717479854667757573205681288459205413
3405392200011378630094556068816674001698420558040336379537645203040243
2256613527836951177883863874439662532249850654995886234281899707733276
1717839280349465014345588970719425863987727547109629537415211151368350
6275260232648472870392076431005958411661205452970302364725492966693811
5137322753645098889031360205724817658511806303644281231496550704751025
4465011727211555194866850800368532281831521960037356252794495158284188
2947876108526398140
Обратите внимание на то, что при этом способе теряются ведущие нули! У нас, на пример, потерялся один нуль.
1000- (IntegerPart[N[Log[10,m],10]]+1)
1
Реконструкция числа по списку цифр, полученному
с помощью функций IntegerDigits и RealDigits, — функция FromDigits
Как мы видели, иногда по списку цифр (и других вспомогательных данных) нужно восстановить число. Это выполняется с помощью функции FromDigits. Если этой функции передать один параметр — список, то при восстановлении числа она счита ет, что цифры в списке — десятичные. Но при необходимости можно указать и осно вание системы счисления как второй параметр. Вот как, например, можно получить
приближение п в виде десятичной дроби, а затем интерпретировать ее как шестнадца теричную.
n=RealDigits [N [Pi, 100] ] П3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9,5,0,2, 8,8,4,1,9,7,1,6, 9, 3,9, 9, 3,7,5,1,0,5, 8,2,0, 9,7,4,9, 4,4,5, 9,2,3,0,7,8,1, 6,4,0, 6,2,8,6,2,0, 8, 9, 9,8, 6,2,8,0,3,4,8,2,5, 3,4,2,1,1,7,0,6,8},!}
m=FromDigits[п,1 6 ] 6210420219080234082288368748950270260562074788543769757316612447252403 9116550832293341127114384366665421990706186169869/20173827172553973356
Числа, их представление и операции над ними |
87 |
6868685312735302682008265064783086939895262229738095470065718330441043
22501076808092993531037089792
Можете ли вы узнать к? Едва ли!
N[ т ,100]
3.07845416041303633897479004906858798320233063927240596341189579525421
4685744614316128726080638418296
Но на самом деле восстановить его очень просто.
k=RealDigits[m, 16] {13,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9,5,0,2,
8,8,4,1,9,7,1,6,9,3,9,9,3,7,5,1,0,5,8,2,0,9,7,4,9,4,4,5,9,2,3,0,7,8,1, 6, 4,0, 6,2,8, 6, 2,0, 8, 9, 9, 8, 6,2,8,0, 3,4,8,2,5, 3,4,2,1,1,7,0,6,8},!}
Если первый аргумент имеет вид {список, л}, то л рассматривается как показа тель степени (основанием степени служит основание системы счисления), на котору* умножается число, восстановленное по списку цифр. Если список имеет ви {список-1, {список-2}}, то список-2 рассматривается в качестве периода система тической дроби.
Функция IntegerDigits теряет знак числа, ПОЭТОМУ FromDigits [IntegerDigits [n]
равно абсолютной величине Abs [п], а не п.
“Цифромания”: как посчитать девятки
в десятичном представлении е — функция DigitCount
Система Mathematica позволяет вычислить столько констант! С точки зрени! “цифроманов” было просто преступно не воспользоваться этим и не узнать, напри мер, как распределены единицы и нули в числах от 1 до 256, записанных в двоично) системе, или же не посчитать количество девяток в десятичном представлении осно вания натуральных логарифмов. Именно для этого (и многих других полезных вещей как раз и предназначена функция DigitCount. Вызов DigitCount [n, b, d] воз вращает количество цифр d (предполагается, что это цифра системы счисления с ос нованием Ь) в числе п, записанном в системе счисления с основанием Ь. Рассмотри сначала простой пример. Вот как найти представление числа 175! в системе счисленш с основанием 25.
n=IntegerDigits[175!,25]
{5,5,19,4,8,14, 15.1.9.19.4.2.23.1.8.6.13.9.13.12.12.0. 18.4.21.16.16, 11,16,10,15,6,23 ,14,20,0,21,14,3,13,5,9,12,24,2,18,12,19,14,5,18,1,4, 5.20.11.23.8.21, 4.0. 6.13.3.8.2.20.17.23.18 20,3,10,11,16,21 ,2,14,7,6,6,21,14,6,0,12,20,6,24,13,10,13,1,24,16,21, 17,17,17,14,11,3 ,22,17,12,8,4,19,22,12,16,5,17,13,21,18,20,6,2,8,4,1, 3,19,10,12,18,18 ,16,0,20,19,14,0,14,8,5,5,23,14,10,16,23,7,8,18,2,1, 17,23,14,0,0,20, 2,15,9,17,13,10,24,8,20,7,7,12,23,6,3,18,8,13,18,15,6,
7.12.7.20.14.22, 13.4.18.22.7.7.15.13.21.4.7.12.18.21.15.0. 0.0.0.0.0.0,
0, 0, 0,0, о, о, о, о, 0, 0, 0,0,0, 0} А вот как можно узнать, сколько раз в этом списке встречается цифра 14
DigitCount[1751,25,14]
12
Но это еще что! Можно ведь даже построить график зависимости количества еди ниц в двоичном представлении п от л.
ListPlot[Table[DigitCount[n, 2, 1], {n, 256}], PlotJoined->True];
88 |
Гпаваi |
О, это настоящая музыка цифр! Но это еще не все: если третий параметр опущен, функция DigitCount посчитает количество вхождений каждой цифры в представлении числа п в системе счисления с основанием Ь. (Таким образом, получится список из Ь чисел.) При этом количество вхождений единицы стоит на 1-м месте в списке, двой ки — на 2-м, цифры к (к > 0) — на к-м, а количество вхождений нуля — на послед нем, 6-м. Если же опустить и второй параметр — основание системы счисления, то сис тема счисления предполагается десятичной.
Вот как, например, можно сосчитать, сколько раз различные десятичные цифры входят в первые (после запятой) 10 знаков десятичного представления основания на туральных логарифмов.
п=0
0
D igitC oun t [IntegerPart [10Л (10л (п+1) }* FractionalPart[N[E,10A (n+l)+10]]]]
{2,2, 0 , 1 , 0 , 0 , 1 , 4 , 0 , 0}
А вот как узнать, насколько фактически эти цифры отличаются от среднего, 10л
D ig itC o u n t [IntegerPart[10А (10л (п+1))* FractionalPart[N[E,10A (n+l)+10]]]]-10An
{ 1 , 1 , - 1 , 0 , - 1, - 1, 0 ,3 , - 1, - 1}
А теперь посчитаем относительные отклонения от среднего.
N[(D ig itC o u n t [IntegerPart[10Л (10А (п+1))* FractionalPart[N[E,10A (n+l)+10]]]]-10An)/10An,4]
{1.000,1.000,-1.000,0,-1.000,-1.000,0,3.000,-1.000,-1.000}
Ну а теперь мы можем составить таблицу таких отклонений для п = 0, 1, 2, 3, 4, 5.
Do [Print [n, ":",N[ (D ig itC o u n t [IntegerPar.t [10A (10A (n+1) )* |
( |
FractionalPart[N[E,10A (n+1)+10]]]]-10An)/10An,4] ],{n,0,5}] |
1 |
0{1.000,1.000,-1.000,0,-1.000,-1.000,0,3.000,-1.000,-1.000}
1: {-0.4000,0.2000,-0.2000,0.1000,0.3000,0.2000,0.6000,-0.3000,0,
-0.5000} 2 : {-0.04000,-0.03000,0.09000,0,-0.1500,-0.01000,
-0.01000,0.03000,0.1200,0} 3 : {-0.01100, 0.004 000, 0.008000,-0.01800,-0.008000, 0.07 900, 0.008000,
-0.004000,-0.03200,-0.02600} 4 {0.02640,-0.01450,0.003500,0.003900,0.003400,0.01830,-0.01250,
Числа, их представление и операции над ними |
89 |
-0.003300,-0.01370,-0.01150} 5 : {0.001320,-0.001550,0.002280,0.003890,0.0008700,0.004790,
-0.0009000,-0.001860,-0.003090,-0.005750}
Одно время некоторых “цифроманов” очень беспокоили неравномерности в рас пределении девятки в десятичном представлении основания натуральных логарифмов. Честно говоря, просматривая эту таблицу, особых причин для беспокойства именно по поводу девятки я не вижу. Вы имеете возможность просмотреть таблицу, самостоя тельно составить более подробную и сформировать собственное мнение — с помощью функции DigitCount это совсем просто! Если же изучать таблицу лень, можно пред ставить данные в виде графика (обратите внимание на то, что ось, на которой отло жены значения отклонений, не проходит через начало координат, которое находится вне графика).
n=5;ListPlot[N[(DigitCount[IntegerPart[10Л (10л (n+1))*
FractionalPart[N[E,10л (n+1)+10]]]]-10лп)/10лп, 4], PlotJoined-»True]
Из графика видно, что наибольшее отклонение от среднего в первом миллионе де сятичных знаков не у девятки, а у нуля. Аналогичный график для первых двух мил лионов десятичных знаков строится так.
n=5;k=2;ListPlot[N[(DigitCount[IntegerPart[10Л (к*10Л (п+1))* FractionalPart[N[E,k*10A (n+1)+10]]]]-к*10лп)/ (k*10An),4],
PlotJoined-»True ]
90 |
Гпава 2 |
Как видите, если и винить, то скорее нули, а не девятки!
Ну а вот как можно построить график зависимости количества единиц в числе
Fn —[1п' -(1 + знаменатель{В2п))х In2,05 ln(w+1)х5Я/4-71 х змаменатель(В2п)].
ListPlot[Table[DigitCount[Fibonacci[n]-
IntegerPart[Log[Denominator[1+Abs[BernoulliB[2 n]]]]Л1.2*
Log[Log[n+1]]Л2.0*5Л (n/4.71) ]
Denominator[BernoulliB[2 n]], 2, 1], {n, 256}]/ PlotJoined->True]
Наконец, можно заняться изучением двоичного представления числа
числитель(В2п)х знаменателъ(В2п).
Вот отклонение количества единиц в представлении от среднего.
ListPlot[Table[DigitCount[Numerator[BernoulliB[2 n]]* Denominator[BernoulliB[2 n]], 2, 1]-
Log[2,Abs[Numerator[BernoulliB[2 n] ]* Denominator[BernoulliB[2 n]]]]/2, {n, 256}], PlotJoined->True]
А вот и относительное отклонение.
ListPlot[Table[(DigitCount[Numerator[BernoulliB[2 n]]* Denominator[BernoulliB[2 n]], 2, 1]-
Log[ 2 , Abs[Numerator[BernoulliB[2 n]]* Denominator[BernoulliB[2 n]]]])/
Числа, их представление и операции над ними |
91 |
(2*Log[2,Abs[Numerator[BernoulliB[2 n]]* |
t |
©©nominator[BernoulliB[2 n]]]]), {n, 256}], |
PlotJoined->True] |
Какйе стремительные взлеты и падения!
Экспоненциальное представление чисел:
функция MantissaExponent
Функция MantissaExponent [х] представляет число х в виде списка, который со
держит мантиссу и экспоненту числа.
MantissaExponent[3.4 1СГ25]
{0.34,26)
MantissaExponent[Pi]
MantissaExponent t-EAPi]
MantissaExponent 10]
(0,0)
В качестве второго аргумента функции M an tissaE xpon en t можно задать основа ние, которое не обязательно дожно быть целым.
MantissaExponent(Е,Е]
MantissaExponent(Е,2]
MantissaExponent{ЕЛ10,2]
лъ
I 15
{ f ir * «}
Однако комплексными аргументы функции MantissaExponent не могут быть.
9* |
Глава 3 |