Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
vovoch
2 / 2 / 0
Регистрация: 07.12.2011
Сообщений: 25
#1

Переписать функцию с C на C# - C#

17.04.2013, 19:38. Просмотров 278. Ответов 0
Метки нет (Все метки)

Есть у Шнайера функция, реализующая мультипликативную инверсию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static uint16
mulInv(uint16 x)
{
       uint16 t0, t1;
       uint16 q, y;
       if (x <= 1)
              return x;     /* 0 and 1 are self-inverse */
       t1 = 0x10001L / x;   /* Since x >= 2, this fits into 16 bits */
       y = 0x10001L % x;
       if (y == 1)
              return low16(1-t1);
       t0 = 1;
       do {
              q = x / y;
              x = x % y;
              t0 += q * t1;
              if (x == 1)
                     return t0;
              q = y / x;
              y = y % x;
              t1 += q * t0;
       } while (y != 1);
       return low16(1-t1);
} /* mukInv */
Я так и не смог найти в интернете, что такое low16. Предположение - взять младшие 16 бит числа.
В итоге я получил вот такую функцию:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private static readonly int MASK = 0xffff;
private static readonly int BASE = 0x10001;
 
private ushort mulInv(ushort x)
        {
            ushort t0, t1, q, y;
 
            if (x < 2)
            {
                return x;
            }
            t0 = 1;
            t1 = (ushort)(BASE / x);
            y = (ushort)(BASE % x);
            
            while (y != 1)
            {
                q = (ushort)(x / y);
                x = (ushort)(x % y);
                t0 = (ushort)((t0 + (t1 * q)) & MASK);
                if (x == 1)
                {
                    return t0;
                }
                q = (ushort)(y / x);
                y = (ushort)(y % x);
                t1 = (ushort)((t1 + (t0 * q)) & MASK);
            }
            return (ushort)((1 - t1) & MASK);
        }
Но работает она не верно... Что не так?
http://www.cyberforum.ru/csharp-net/thread1254881.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 19:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переписать функцию с C на C# (C#):

Переписать функцию с Python на язык C#
Помогите метод переписать на C# этот: import requests from urllib.parse...

Переписать функцию
Приветствую всех. Не подскажите, как эту функцию переписать на чистый js? ...

Переписать функцию с С на C++\Qt
Нужно переписать функцию добавления заголовка wav в файл. Вот функция, которая...

Переписать процедуру на функцию
uses crt; var mas:array of real; i,j,x,y:integer; begin clrscr;...

Переписать функцию с C на Delphi
void * TestFunc(void * a, int i) { return (RSize *)a + (2 + i); } Как...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 19:38
Привет! Вот еще темы с решениями:

Переписать процедуру в функцию
Не получается правильно переписать процедуру в функцию, помогите пожалуйста. ...

Переписать с С# на Матлаб функцию
Здравствуйте, помогите пожалуйста переделать эту функцию в матлба M-File ...

Переписать функцию с C++ на ассемблер
Всем доброго времени суток! В курсовой работе по ООП на c++ возникла задача...

DCEF3. Переписать функцию на C++
Здравствуйте, друзья. Никак не могу переписать небольшой кусочек кода на c++....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru