Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: математические действия над очень большими числами
 
 автор: sasha1133   (26.02.2010 в 19:07)   письмо автору
 
 

Есть несколько общих вопросов по поводу действий над очень большими числами (порядка 10 в степени 1000 000 000).

1) Как работать с такими числами, в переменную никакого типа, я так понимаю, такое число не запишешь. Поэтому видимо надо разбивать на несколько переменных каким то образом.

2) Если например у меня Win XP 32-битная, а проц атлон Х2 64, можно ли оперировать 64-х разрядными переменными?

3) Возможно ли использовать видеокарту для вычислений?

4) Что почитать, чтобы найти ответы на эти вопросы? =)

  Ответить  
 
 автор: sasha1133   (27.02.2010 в 12:03)   письмо автору
 
   для: sasha1133   (26.02.2010 в 19:07)
 

Помогите кто-нибудь. Кстати, насколько помню, в delphi кажется была такая вещь, что можно было писать ассемблерный код внутри программы. А в Visual C++ такое есть?

  Ответить  
 
 автор: Miha_drinking_bout   (27.02.2010 в 16:40)   письмо автору
 
   для: sasha1133   (27.02.2010 в 12:03)
 

Да! Для примера приведу небольшой код:
// qeqwrew.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])

{
int a = 3; // объявляем переменную a и кладем туда значение 1
int b = 2; // объявляем переменную a и кладем туда значение 1
int c; // объявляем переменную c, но не инициализируем ее

// начало ассемблерной вставки
__asm{
mov eax, a ;// загружаем значение переменной a в регистр EAX
mov ebx, b ;// загружаем значение переменной b в регистр EBX
add eax, ebx ;// складываем EAX с EBX, записывая результат в EAX
mov c, eax ;// загружаем значение EAX в переменную c
}
// конец ассемблерной вставки

// выводим содержимое c на экран
// с помощью привычной нам функции printf
printf("a + b = %x + %x = %x\n",a,b,c);
}

насчет чисел не знаю максимум использовал для решения задачи на с++ double, даже long double использовать не приходилось. Найдешь ответ пиши самому интересно, может пригодится.

  Ответить  
 
 автор: Miha_drinking_bout   (01.03.2010 в 14:46)   письмо автору
 
   для: sasha1133   (27.02.2010 в 12:03)
 

Подскажите пожалуйста как правильно организовать ассемблерные вставки в DevCpp(писать в байт коде не предлагать :).

  Ответить  
 
 автор: exp   (02.03.2010 в 22:37)   письмо автору
 
   для: Miha_drinking_bout   (01.03.2010 в 14:46)
 

с примером что-то не понял , eax,ebx,ecx,edx это 32x битные регистры, в них умещается только 4 байта, как и в int, long, DWORD ....
в 64х-битных системах юзаются 64x-битные rax,rbx,rcx,rdx, возможно даже от проца зависит

на С иногда просто две переменные иногда используют чтобы записать больше , в win32 например кое-где размер файла лежит в структуре в двух dword.

есть и 64х-битный тип
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
, такие структуры
typedef struct _FLOAT128 {
__int64 LowPart;
__int64 HighPart;
} FLOAT128;
правда там везде с отписками типа "__int64 is only supported by 2.0 and later midl. (Microsoft Interface Definition Language я так понял)" или что-то похожее

Есть ещё уже готовые библиотеки ещё для работы с большими числами

А в gcc AT&T-синтаксис ассемблера, вроде традиционно под motorola процессоры кодили таким синтаксисом,
ссылку на описание синтаксиса не нашёл, но отличается сильно, хотя можно и более-менее привычно делать,
вот здесь было например
тут была тема
> автор: exp (05.06.2009 в 21:12)

Поторопился со вставками asm кода, и
оказалось компилируется ,) например такой код
main() {
char *buf = "Строка";

 __asm__ ("push esi \n\
         mov esi, %0"
::"m"(buf));
 __asm__ ("push 1 \n\
         push esi \n\
         push esi \n\
         push 0 \n"

         "call _MessageBoxA@16 \n"
         "xor eax,eax\n\
         pop esi"

         );
printf("%s\n", buf);
getch();
putch(7); //  символ 0x07
}

так-же вез #include`sов
только нужно кроме кроме выключения
"Проект-параметры-Компилятор-Компилятор С-поддержка стандартных ..."
ещё добавлять строку -masm=intel ? там где
"Проект-параметры-Параметры-'Компилятор'"


непонятно почему кроме messagebox ничего не показывает :) но работает


читать всёравно где-то нужно, а везде AT&T
, я только по поводу того как передать переменную из c в asm >mov esi, %0"::"m"(buf)); немного разбирался, но быстро бросил это дело и забыл :)
Есть возможность просто на ассемблере компилировать объектный файл с функциями и прилинковывать к проекту.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования