Форум программистов, компьютерный форум CyberForum.ru

Вычисления с малыми числами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Многопоточное програмирование http://www.cyberforum.ru/cpp-beginners/thread84315.html
здрасвуйте))) обращаюсь к вам, так как знаю, что люди которые общаются на етом форуме понимают своё дело))) мне нужно написать какую то простенькую многопоточную програму. Хотелось бы увидеть пример такой програмы, естли у кого то есть такое, а ещё лутше, естли будет с коментариями, так как мне ето нужно для лабораторной работы. У меня есть неккий материал, но там ничего не понятно, всё как то...
C++ [BC++] Сообщения из FTDI Заранее приветствую всех откликнувшихся. Раздобыл некоторые девайсы для реализации след.схемы: ПК<->USB<->FTDI-устройство<->шина CAN<->некий контроллер<->полезное оборудование. Ко всему этому есть работающий фирменный софт, но его поддержка перестала осуществляться производителем, а потому возникло желание попробовать сделать потобный софт самому, т.к. обладаю некоторыми навыками... http://www.cyberforum.ru/cpp-beginners/thread84261.html
C++ Как определить размер изображения??
Подскажите, пожалуйста, как определить размер изображения ?? (С++).
C++ Построить бинарное дерево
Помогите построить бинарное дерево арифметического выражения, т.е. если входная трока A+B то дерево должно получится вот такое + / \ A B я уже сделал часть работу, а именно перевод входной строки в ОПЗ(если...
C++ Работа с каталогом изображений http://www.cyberforum.ru/cpp-beginners/thread84214.html
Есть задание: имеется каталог изображений. Нужно определить, какое/какие изображения превышают заданный порог по площади. Скажите, пожалуйста, каким образом можно определить размер самих изображений, реализуя алгоритм на С++ ?? Заранее спасибо.
C++ Побитовое копирование double Доброго времени суток! Преамбула: В целях интеграции Lua в движок C++ пытаюсь написать класс который может помещать в себя все типы данных в определенном порядке, чтобы можно было передать ссылку на этот класс в функцию которая отправит эти данные в обработчик Lua. Класс почти написал за исключением поддержи double - потому что для double нельзя использовать побитовые операции, через которые... подробнее

Показать сообщение отдельно
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
12.01.2010, 19:48     Вычисления с малыми числами
http://gmplib.org/
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.
Выглядит массивно, но по крайне мере алгоритмы можно оттуда подсмотреть.

Добавлено через 18 часов 26 минут
Все таки не сдержался и попытался сделать что то свое, однако ... не зная броду( видимо представление double для различных степеней различно?
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
31
32
33
34
35
    long double A = 2E-12; const int size = sizeof(A);
    long double B = 2E-25;
    void* vA = &A;
    void* vB = &B; 
    unsigned char* cA = (unsigned char*)vA;
    unsigned char caA[size] = {0};
    unsigned char* cB = (unsigned char*)vB;
    unsigned char caB[size] = {0};
    // Считывание байтов в массивы
    memcpy(&caA[0], &A, size);
    memcpy(&caB[0], &B, size);
 
// Собственно сложение
    unsigned long int Sum = 0; // переменная для суммы и переноса
    // Собственно сложение через массивы
    for (int i = 0; i < !!!; i++)
    {
        // Остаток и сумма текущих байтов имеют один вес, складываем их
        Sum += (caA[i] + caB[i]);
        // Если текущая сумма байтов выше возможной вместимости байта
        if ( Sum > 255 )
        {
            // Оставляем 255 в текущем байте 
            caA[i] = 255;
        }
        else
        {
            // Сумма байт полностью вместилась
            caA[i] = (unsigned char)Sum;
        }
        // Вычитаем их сдвигом, чтобы для старших байт был корректый результат
        Sum = Sum >> 8;
    }
    long double C = 0;
    memcpy(&C, &caA[0], size);
Увеличение младшего байта double увеличивает число, однако такое ощущение что увеличение для A и B разные. В любом случае в оригинальном алгоритме стояло вместо !!! - size и он работал неверно. Если копировать только первый байт (вместо !!! - 2) - заметно что A прибавилось, но больше чем на B... Хотя может что то можно так получить все же?
 
Текущее время: 02:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru