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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ двумерный массив http://www.cyberforum.ru/cpp-beginners/thread84545.html
Ввести двумерный массив А (5*2).Определить в нем сумму модулей отрицательный элементов. Язык С++.Помогите, пожалуйста.Нужно на экзамен.
C++ Файл, содержащий структуру Ребят, помогите решить задачу. Дано следующее условие: (оформить нужно в С) Дан файл, содержащий сведения о книгах: фамилию автора, название книги и год издания. По запросу определить имеется ли в наличии книга с определенным названием, если да, то вывести фамилию автора и год издания. Заранее Спасибо! http://www.cyberforum.ru/cpp-beginners/thread84534.html
Исcледованние абстрактных типов данных C++
Нужно сделать такое задание, кто может помогите сделать. Написать 2 программы на Си которые состоит с следующих дейтсвий 1.Описания элемента структуры данных согласно с вариантом (табл.1). 2.Описания абстрактного типа данных согласно с вариантом (табл.1) 3. Реализация абстрактного типа данных: – записи до абстрактного типа данных нескольких значений („операция_1”); – чтение до абстрактного...
C++ отсортировать массив модифицированным методом простого выбора
отсортировать массив модифицированным методом простого выбора. а затем применить этот масив для решения задачи. Дана целочисленная последовательность {ai} верхний индекс n нижний 1. Получить упорядоченную по возрастанию последовательность из чисел, которые входят в данную последовательность по одному разу. Все это сделать одной программой!
C++ Отсортировать массив методом Шелла http://www.cyberforum.ru/cpp-beginners/thread84481.html
Помогите пожалуйста! мне нужно отсортировать массив методом Шелла, а потом с помощью этого отсортированного массива решить задачу. Если данная последовательность не упорядочена ни по неубыванию, ни по невозрастанию, найти среднее геометрическое положительных членов.
C++ Комплексные числа.. Помогите пожалуйста... срочно нужно решение этой задачки.. Описать класс для работы с комплексными числами. Определить методы для сложения, умножения чисел. Заранее спасибо... подробнее

Показать сообщение отдельно
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
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... Хотя может что то можно так получить все же?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru