Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М

.pdf
Скачиваний:
1
Добавлен:
19.11.2023
Размер:
33.75 Mб
Скачать

Представление вещественных чисел в виде списка цифр

всистеме счисления с произвольным основанием: функция 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