рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

В16-ом коде: FF FF FF 85

В16-ом коде: FF FF FF 85 - раздел Информатика, Лекция 1. Битовые операции   Алгоритм “Быстрая Степень” ...

 

Алгоритм “Быстрая степень”

Рассмотрим возведение an, где n- целое, положительное число. Алгоритм основан на двоичном представлении показателя n.

 

n= nk*2k + nk-1*2k-1 +. . . . ni*2i+. . . .n1*21+ n0+20

 

Вычисление этого произведения представляется тремя параллельными процессами:

· вычисление ni– цифр двоичного представления показателя n,они получаются как остатки от деления на 2 сначала n,а потомчастных от делений, пока не получится частное, равное нулю, остатки в порядке получения n0 n1 n2 . . .nk-1 nk(см. перевод целого в двоичную систему).

· параллельно с этим процессом строятся степени: a=a*a

.

· Кроме того, происходит накопление произведения в некоторой переменной p (в начале p=1;): если остаток niравен нулю, соответствуюшая степень не учитываертся в произведении, если ni ≠0, то p=p* ,т.е. в этом алгоритме (быстром!) не все степени вычисляются, а из вычисленных не все учитываются.

p=1 а n |_2

a1 n0 | n|_2

a2 n1| n

. . . . . . .

p=p* ,если ni ≠0

. . . . . .

, nk-1 |n |_2

a2k nk | 0

Пример. Найти a18.

18=100102, т.е.в произведении строятся степени a1, a2, a4, a8, a16,

а учитываются две, p=1* a2* a16

 

#include <iostream>

using namespace std;

 

// функция возведения a в степень n

double power (double a, int n)

{double p=1;

while (n!=1)

{if (n&1) p*=a; // анализ очередной двоичной цифры

a*=a; //в переменной a получается очередная степень

n>>=1; // сдвиг n

}

return p*a;

}

 

// Рекурсивный вариант функции возведения a в степень n

double powerR (double a, int n)

{if (n==0) return 1;

if (n==1) return a;

if (n&1) return powerR (a*a, n>>1)*a;

else return powerR (a*a, n>>1);

}

int main (){

cout<<power(2.0,18)<<endl;

cout<<powerR(2.0,18)<<endl;

return 0;

}

Результаты:

 

– Конец работы –

Эта тема принадлежит разделу:

Лекция 1. Битовые операции

Битовые поразрядные операции применяются к целым операндам и выполняются над их двоичными представлениями Стандартные типы кроме вещественных... Рисунок Схема битовой операции...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: В16-ом коде: FF FF FF 85

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Представление вещественных чисел в памяти ПК
В С++есть два вещественных типа: float и double. Операции вещественной арифметики выполняет сопроцессор (FPU). Значение, полученное в сопроцессоре, преобразуется

Eсли P’=0 и f=0, то X=0.
Eсли P’=max, то данное X не является числом, а представляет некоторое специальное значение: +бесконечность : 0 11 . . .11 00. . . . 00 - бесконечность : 1 11 . . .11 00. . . . 00

L= 1024* lg 2=1024*0.30103=308.25472
2.2*10-308<=|X| <=1.7*10308 и X=0 __[\\\\\\\\\\\\\\\\\] _____|_____[\\\\\\\\\\\\\\\\]______

Выполнение операций над числами, представленными с плавающей точкой (говорят- в плавающей арифметике).
Пусть X = Mx×2Px ,а Y = My×2Py a)Сложение (вычитание) чисел: Z = X ± Y = Mx×2Px ± M

Достоинства формы представления чисел с плавающей точкой.
· Сравнительно широкий диапазон чисел; · Хранение только значащих цифр числа. Представление обеспечивает для числа максимальную точность при фиксированной разрядной сетке.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги