Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 81 из 87<  1 ... 78  79  80  81  82  83  84 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
LENIN87 fp64, насколько я знаю, обычно даже не поддерживается видеокартами уровня ниже ТОП. Для типичного 3D вроде игр родная точность это fp32, даже на процессоре расчёты связанные с графикой считаются в float - точности хватает, скажем так, в большинстве случаев. ВК заточены под fp32, int и fp64 на видеокартах много медленнее

LENIN87 писал(а):
В каких случаях эта разница будет видна?

Большим капитанством будет ответить "в любых случаях где действительно требуются точные вычисления". Но не думаю что вам этот ответ нужен



Партнер
 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: msk
Фото: 1
Industrialice Если говорить о nv, то там только архитектура влияет: все железки с compute capability>1.3 работают с fp64, перф правда на порядок меньше. На теслах разница между fp32 и fp64 сокращается, например на предпоследней всего в два раза медленнее.

Одно дело когда разница тысячные доли процента, а другое когда единицы-десятки. На заморском сайте прочел, что разница видна при частом применении exponential functions.

_________________
http://www.youtube.com/watch?v=gHcaPXe_eeg
http://vk.com/topic-13627012_27382316


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
fp32 - это обычный float, fp64 - double
какая именно нужна - зависит от задачи и от кривизны решения.


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: msk
Фото: 1
Вот я и пытаюсь выяснить что за задачи такие, в которых жизненно необходимо fp64 юзать.

_________________
http://www.youtube.com/watch?v=gHcaPXe_eeg
http://vk.com/topic-13627012_27382316


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
LENIN87 если не нужны научные вычисления или финансовые - я не думаю что вам где-то реально понадобится fp64, хотя точность fp64 несравнимо выше чем у fр32( заведомо ложное утверждение учитывая что речь идёт о float-point, где что-то обобщить не всегда возможно, но в общем случае это будет правдой ). Опять же, даже в 3Д-графике fp32... не хватает, тем не менее намного лучше выкрутиться с fp32, чем обвалить производительность используя fp64( гипотетический вариант, fp64 в обычных условиях даже не поюзаешь )


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
Industrialice писал(а):
LENIN87 если не нужны научные вычисления или финансовые - я не думаю что вам где-то реально понадобится fp64, хотя точность fp64 несравнимо выше чем у fр32( заведомо ложное утверждение учитывая что речь идёт о float-point, где что-то обобщить не всегда возможно, но в общем случае это будет правдой ). Опять же, даже в 3Д-графике fp32... не хватает, тем не менее намного лучше выкрутиться с fp32, чем обвалить производительность используя fp64( гипотетический вариант, fp64 в обычных условиях даже не поюзаешь )

во-первых, в финансовых вычислениях никогда не используют float point
во-вторых, во всяких cfd почти всегда используют double
в-третьих, точность вычислений очень сильно зависит от непосредственно реализации этих вычислений в программе. просто проводя операции в неправильном порядке легко получить неправильный результат, или сильно его загрубить

ну а вообще double поддерживаются старшими ati в каждой линейке начиная с hd5000, нвидия тоже поддерживает. ну а tesla ессно вообще легко их жуёт


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
ToSHiC писал(а):
во-первых, в финансовых вычислениях никогда не используют float point

My bad, про это я забыл - хотя в любой статье про float-point упомянуть это не забывают. В-третьих вроде как не в тему


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: msk
Фото: 1
Сегодня еще вот такой ответ получил от человека, который занимается этими вашими научными вычислениями:
Цитата:
fp64 стоит использовать если у тебя большой шанс накопления ошибки за счет оперирования с числами разной размерности, например, численное решение дифуров или же нелинейных уравнений. Другими словами, везде где у тебя есть итерационный процесс, где используются результаты с прошлого слоя, причем операнды имеют разную размерность, стоит использовать fp64.

_________________
http://www.youtube.com/watch?v=gHcaPXe_eeg
http://vk.com/topic-13627012_27382316


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Народ. а какое это отношение имеет к C++. В Паскале тоже есть real и double. А финансы из-покон веков базируются на фортране - там сложно программеру "очепятку" получить (хотя спутники уже летали в "никуда")...


 

Member
Статус: Не в сети
Регистрация: 01.08.2007
Откуда: Чехов, М. О.
Всем привет) дайте, пожалуйста, ссылку на компилятор обычного С, я вот думал выучить, а найти компилятор целый гемор) мне подсказали GCC, но у них на сайте треш угар и содомия, черт пойми где взять нужные файлы...

_________________
Легче учиться на чужих примерах, чем на своих ошибках.


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
Pinki-Mertvec GCC луший выбор для Си - качается MinGW( в общем случае оптимальный вариант ), ставится за пару кликов и сразу можно кодить. Visual Studio содержит Си-компилятор, но c поддержкой устаревшего стандарта языка


 

Member
Статус: Не в сети
Регистрация: 01.08.2007
Откуда: Чехов, М. О.
Industrialice а ссылку можешь дать?) я что в школе, что в институте прогал на трубе и делфи) там с ними как-то проще, либо турбопааскаль скачал, либо борланд делфи и гогого

Добавлено спустя 14 минут 38 секунд:
скачал с сайта MInGw, установился вроде сам, через cmd.exe и все. Как его запустить? или я чего-то не улавливаю... для контроллеров хотя бы среды разработки есть, а просто для компа я даже не понимаю как и что...

_________________
Легче учиться на чужих примерах, чем на своих ошибках.


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
Pinki-Mertvec есть IDE Code::Blocks


 

Member
Статус: Не в сети
Регистрация: 13.06.2007
Откуда: msk
Фото: 1
Камрады, разъясните плз!
Изучаю книгу: Страуструп Б. - Программирование. Принципы и практика использования C++ - 2011
В книге в одной из глав иллюстрируется разработка приложения - консольный калькулятор. Так вот для реализации калькулятора вводится понятие лексемы (литерал или оператор или скобка):
Код:
class Token {
public:
    char kind;        // what kind of token
    double value;     // for numbers: a value
    Token(char ch)    // make a Token from a char
        :kind(ch), value(0) { }   
    Token(char ch, double val)     // make a Token from a char and a double
        :kind(ch), value(val) { }
};

//------------------------------------------------------------------------------

int main()
{
    Token t1('+');     // initialize t1 so that t1.kind = '+'
    Token t2('8',11.5);// initialize t2 so that t2.kind = '8' and t2.value = 11.5
}

Затем вводится поток лексем:
Код:
class Token_stream {
public:
    Token_stream();  // make a Token_stream that reads from cin
    Token get();     // get a Token (get() is defined elsewhere)
    void putback(Token t); // put a Token back
private:
    bool full;       // is there a Token in the buffer?
    Token buffer;    // here is where we keep a Token put back using putback()
};

//------------------------------------------------------------------------------

// The constructor just sets full to indicate that the buffer is empty:
Token_stream::Token_stream()
    :full(false), buffer(0)    // no Token in buffer
{
}

//------------------------------------------------------------------------------

// The putback() member function puts its argument back into the Token_stream's buffer:
void Token_stream::putback(Token t)
{
    if (full) error("putback() into a full buffer");
    buffer = t;    // copy t to buffer
    full = true;   // buffer is now full
}

//------------------------------------------------------------------------------

Token Token_stream::get()
{
    if (full) {    // do we already have a Token ready?
        // remove token from buffer
        full=false;
        return buffer;
    }

    char ch;
    cin >> ch;     // note that >> skips whitespace (space, newline, tab, etc.)

    switch (ch) {
    case ';':      // for "print"
    case 'q':      // for "quit"
    case '(': case ')': case '+': case '-': case '*': case '/':
        return Token(ch);        // let each character represent itself
    case '.':
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
        {   
            cin.putback(ch);       // put digit back into the input stream
            double val;
            cin >> val;            // read a floating-point number
            return Token('8',val); // let '8' represent "a number"
        }
    default:
        error("Bad token");
    }
}

//------------------------------------------------------------------------------

int main()
try
{
    Token_stream ts;
    Token t(')');
    ts.putback(t);
    Token u = ts.get();

    if (u.kind != t.kind || u.value != t.value)
        error("Error in token stream logic");
}
catch (exception& e) {
    cerr << "error: " << e.what() << '\n';
    return 1;
}
catch (...) {
    cerr << "Oops: unknown exception!\n";
    return 2;
}

Вопрос: Почему нельзя было реализовать все в одном классе? Автор хотел донести какую-то идею разделяя эти два понятия?

_________________
http://www.youtube.com/watch?v=gHcaPXe_eeg
http://vk.com/topic-13627012_27382316


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
лексема - это неделимая единица входных данных, число или знак операции, или функция типа синуса. входной поток байтов надо представить в виде потока лексем, для этого и сделан класс Token_stream.

потом ещё надо будет по грамматике конечный автомат построить, который будет разгребать поток лексем


 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Можно ли вместо (a2 == 0)||(a2 == 2) записать (a2 == 0||2)?

_________________
Идущий осилит дорогу


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
zanac писал(а):
Можно ли вместо (a2 == 0)||(a2 == 2) записать (a2 == 0||2)?

Нет конечно. :D


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
zanac писал(а):
Можно ли вместо (a2 == 0)||(a2 == 2) записать (a2 == 0||2)?

Если упростить второй вариант( а этому ничего не мешает т.к. используются константы ) получится (a2 == 1)
Конечно это не аналогично. Но можно написать (a2 == 0) | (a2 == 2)
Нужно по ситуации смотреть как лучше

P.S. вот что забавно
Код:
int b;
if( a == 2 | a == 0 )
    b = 0;
else
    b = 1;

Visual Studio 2012 зафейлила этот код выдав откровенный бред. VS 2010 ещё хуже справилась. MinGW сделал всё в лучшем виде( я не вижу как можно сделать ещё лучше, хотя может быть если посидеть ).
Код может быть и паршивый, но компиляторы сейчас считаются дофига умными и что компилятор зафейлит такой простой участок сложно ожидать. Это один из аргументов почему нужно по ситуации смотреть


 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Industrialice, такого не ожидал от VS2012. Надо будет проверить дома, как с этим кодом VS6 справляется.

_________________
Идущий осилит дорогу


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
zanac писал(а):
Надо будет проверить дома, как с этим кодом VS6 справляется

Я уже, основной код одинаков, разница только в "самом конце"
VS2012 писал(а):
inc ecx
push ecx

VS2010 писал(а):
lea eax, [ecx+1]
push eax

VS6 писал(а):
inc ecx
mov eax, ecx
push eax

Остальное 1 в 1
Этот push, это потом идёт функция printf выводящая результат, так что он для неё
VS6 и VS2010 хотелось обязательно запушить значение из eax и ниоткуда более
Во всех студиях настройки на макс. скорость


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 81 из 87<  1 ... 78  79  80  81  82  83  84 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan