powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Точная арифметика.
50 сообщений из 50, показаны все 2 страниц
Точная арифметика.
    #33237311
Хитрый Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Пишу небольшой 3d-конструктор на OpenGL(компилятор VC6.0 и MFC). Все вычисления производятся во float и при этом неибежна потеря данных, связанная с неточностями в арифметике(потеря значимости и т.п.) у типов с плавающей точкой. Помогите разобраться в этом достаточно серьезном вопросе.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33238998
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хитрый МухПишу небольшой 3d-конструктор на OpenGL(компилятор VC6.0 и MFC). Все вычисления производятся во float и при этом неибежна потеря данных, связанная с неточностями в арифметике...

Может я что то не понимаю, но порядок округления получаемых значений - мало зависит от языка. Тут больше логика и понимания проблем погрешности вычислений. Другими словами - у Вас проблема не с языком. У Вас проблема с математикой...


с уважением
(круглый)
ЗЫ
Возможно и этот вопрос мона решить - но тут нужно иметь сам код. Т.е. те телодвижения которые делаете Вы.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33239109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хитрый МухДобрый день!
Пишу небольшой 3d-конструктор на OpenGL(компилятор VC6.0 и MFC). Все вычисления производятся во float и при этом неибежна потеря данных, связанная с неточностями в арифметике(потеря значимости и т.п.) у типов с плавающей точкой. Помогите разобраться в этом достаточно серьезном вопросе.

В чем проявляется потеря данных ? То есть как
вы это заметили и почему полагаете, что виноваты
вычисления во float?
...
Рейтинг: 0 / 0
Точная арифметика.
    #33239980
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема -то в чем ? Не ясно.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33240062
VNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда надо использовать double.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33240174
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть довольно популярная задачка. Дано: окружность
и точка, которая по ней двигается по известному закону.
Требуется реализовать анимацию движения этой точки
для заданных интервалов времени dt. Студент диффереци-
рует уравнение зависимости x,y от времени и получает
уравнение движения. И .... точка начинает двигатся
ПО СПИРАЛИ (!). Студент впадает в кому.

Это я к тому рассказываю, что если чего-то не ладится
с вычислениями, стоит обратить внимание на саму
модель вычислений. И в данном примере дело
было вовсе не в разрядности а в понимании
самой
постановки.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33245697
Хитрый Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем кто ответил!
Извините за задержку - инет кончился)))
В общем, приведу небольшой пример:

Код: plaintext
1.
2.
3.
4.
float x =  5555 .f;
   x = x/ 1000 .f;
   printf("%.10f", x);
   x = x* 1000 .f;
   printf("%.10f", x);
посмотрите какая ерунда будет происходить с переменной x
...
Рейтинг: 0 / 0
Точная арифметика.
    #33250420
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хитрый МухСпасибо всем кто ответил!
Извините за задержку - инет кончился)))
В общем, приведу небольшой пример:

Код: plaintext
1.
2.
3.
4.
float x =  5555 .f;
   x = x/ 1000 .f;
   printf("%.10f", x);
   x = x* 1000 .f;
   printf("%.10f", x);
посмотрите какая ерунда будет происходить с переменной x

А чего вы ожидали?
Именно поэтому такие действия в машинных вычислениях являются почти что запрещенными (естественно для тех кто хочет получить нормальный результат)))).
При неосторожном делении вы теряете точность, а при умножении получаете паразитные значения. И поэтому никогда не следует их совмещать. В общем можно руководствоваться принципом -- с каждым значением выполнять по возможности "опасных" минимум операций. Кстати, суммирование ряда величин следует вести с наименьших.
А собственно точные принципы разъясняются в любой книге по вычислительной математике.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33250489
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потеря значений - общая проблема ВСЕХ технологий основанных на цифровых методах обработки информации. Вот точность можно повышать.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33251050
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinПотеря значений - общая проблема ВСЕХ технологий основанных на цифровых методах обработки информации. Вот точность можно повышать.

Вот никак не пойму, откуда такой термин-то выкопал ты -- потеря значений?
Это вы типа переменные теряете?)))
Или имеешь в виду то, что происходит при дискретизации аналогового сигнала в устройствах типа АЦП?
В данном случае обсуждается только потеря ТОЧНОСТИ. Разрядную сетку под мантиссу числа можно увеличивать бесконечно, но элементарные неграмотные операции приведут обратно все к тому же числовому мусору.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33251189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь пишут про subj http://cch.loria.fr/documentation/IEEE754
...
Рейтинг: 0 / 0
Точная арифметика.
    #33252746
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Термин называется "потеря значимости". Возникает при сложении двух чисел, одно из которых большое, другое маленькое. Для сложения на сумматоре числа должны быть приведены из нормализованного состояния к одному порядку. Это достигается за счет сдвига мантиссы меньшего числа вправо на какое-то число разрядов, чтобы сравнять порядки. При больших разницах порядка младшие знаковые разряды меньшего числа спадают с разрядной сетки и не участвуют в сложении, меньшее число вообще даже может превратиться в ноль. Таким образом, что прибавляешь это число, что нет - результат не меняется.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33263189
AlexeyStaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikkА собственно точные принципы разъясняются в любой книге по вычислительной математике.
Не подскажите ли какую-нибудь электронную книгу/документацию по вычмату?
...
Рейтинг: 0 / 0
Точная арифметика.
    #33263972
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любой учебник для вузов по выч. технике. Например,
http://www.ozon.ru/context/detail/id/1713413
...
Рейтинг: 0 / 0
Точная арифметика.
    #33267152
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЛюбой учебник для вузов по выч. технике. Например,
http://www.ozon.ru/context/detail/id/1713413

Мимо!! Дискетна математика не имеет никакого отношения к вычислительной и проблемами точности вычислений не занимается!
А к тому же эта книжка не очень удачная, особенно по стилю изложения материала.
...
Рейтинг: 0 / 0
Точная арифметика.
    #33267161
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для теоретического изучению я бы порекомендовал: Бахвалов, Жидков "Численные методы". И Cамарский, Гулин "Численные методы"


________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Точная арифметика.
    #33267538
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть я Новиковых перепутал ? Что ж их так много что ли ?
Блин, этот из политеха, а мне из ЛИТМО был нужен ...
...
Рейтинг: 0 / 0
Точная арифметика.
    #33275337
Хитрый Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, я уже разобрался почему возникают погрешности вычислений!
Но, блин, может быть существуют уже готовые решения в виде, скажем, библиотек для точных вычислений?
...
Рейтинг: 0 / 0
Точная арифметика.
    #33277583
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть например gmt.
www.gnu.org
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Точная арифметика.
    #39031279
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikkДля теоретического изучению я бы порекомендовал: Бахвалов, Жидков "Численные методы". И Cамарский, Гулин "Численные методы"


________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц

Любая книга с фамилией Самарский представляет собой качественное изложение материала по вычислительной математике
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031282
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсть например gmt.
www.gnu.org

А сейчас этот совет актуален ?
PS
Хочу хотя бы одну программу численного решения ДУ написать не на Maple. Зря что-ли мне так Си нравится :) Заодно сравню по вопросу скорости, но думаю на Си будет медленнее. Будет здорово если ошибаюсь
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031293
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SS
Любая книга с фамилией Самарский представляет собой качественное изложение материала по вычислительной математике

Да что там качественное. Это мелочи. Это один из величайших математиков России, провёл ряд фундаментальных исследований в области теории численных методов, разностных схем.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031387
Фотография битый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinПотеря значений - общая проблема ВСЕХ технологий основанных на цифровых методах обработки информации. Вот точность можно повышать. Так уж и всех?
Квантор требует осторожности в использовании...
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, ну ты некромансер блин. Поднял материал 10-летней давности. Автор уже давно
решил это проблему или завязал с кодинком и пошёл в торговлю.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031534
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж подняли некротопик, пусть будет
What Every Computer Scientist Should Know About Floating-Point Arithmetic
...
Рейтинг: 0 / 0
Точная арифметика.
    #39031995
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaРаз уж подняли некротопик, пусть будет
What Every Computer Scientist Should Know About Floating-Point Arithmetic
кто автор данного обзора? Не встретил там

На самый главный вопрос не ответили. Что по поводу той библиотеки ? Совет актуален ?

Прошу прощение за оффтоп. Знаковый математик рассказывал мне что выполняется вычисления для задач маскировки с точностью до 150 знака. Интересно где такое возможно ?
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032009
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот ещё такой вопрос. Мы получили приближенное решения в виде некоторой линейной комбинации по базисным функциям (они заданы в явном виде). Как мне хранить эту линейную комбинацию ? Использовать указатели на функции, верно ? Но эта линейная комбинация зависит от числа функций участвующих в разложении. Значит нужно разработать некоторый макрос, который будет генерировать код результирующей комбинации. Это возможно ?(генерация кода функции во время выполнения программы)
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032019
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё было бы здорово иметь библиотеку для вычисления определенных интегралов. Можно и самому реализовать, но по скорости моя реализация будет уступать тем, что используют люди. Но таких библиотек не знаю (хотя уверен что есть), посоветуйте какую-нибудь пожалуйста.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032065
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЗдесь пишут про subj http://cch.loria.fr/documentation/IEEE754

не открывается
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032117
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77maytonЗдесь пишут про subj http://cch.loria.fr/documentation/IEEE754

не открывается
За 10 лет хостинг "усох". Tempus edax rerum. Всепожирающее время... Мдя.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032797
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryBagaBagaРаз уж подняли некротопик, пусть будет
What Every Computer Scientist Should Know About Floating-Point Arithmetic
кто автор данного обзора? Не встретил там

На самый главный вопрос не ответили. Что по поводу той библиотеки ? Совет актуален ?

Прошу прощение за оффтоп. Знаковый математик рассказывал мне что выполняется вычисления для задач маскировки с точностью до 150 знака. Интересно где такое возможно ?

SashaMercury,
там же чёрным по белому написано
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html Note – This appendix is an edited reprint of the paper What Every Computer Scientist Should Know About Floating-Point Arithmetic, by David Goldberg , published in the March, 1991 issue of Computing Surveys. Copyright 1991, Association for Computing Machinery, Inc., reprinted by permission.


В стартовом посте никакого "второго вопроса" не обнаружил. Перечитывать весь тред десятилетней давности... Библиотек куча, под разные параметры и задачи. Можно загуглить по https://www.google.com/search?q=Arbitrary precision arithmetic&ie=utf-8&oe=utf-8

Вероятно, это же вопрос про "возможно". Просто очень мало где _реально_ имеет смысл хранить 150 значащих знака...
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032825
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga,

не стал это читать. Обычно авторов как-то выделяют, и не в тексте указывают. Спасибо.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032827
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли как-то узнать каким образом происходит оптимизация возведения в степень -1 ? Такой код выполняется очень быстро
Код: plaintext
1.
pow(-1.0,1<<30).



До того как проверил код выше не думал что стандартная функция каким-то образом оптимизируется, потому изначально написал функцию
Код: plaintext
1.
2.
3.
4.
long double pow_m_1(int p)
{
	return (p & 1) ? -1.0 : 1.0;
}


PS
данная функция используется в выражении результат которого long double, потому она и возвращает long double. Хотя всё будет работать и с int.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032865
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryМожно ли как-то узнать каким образом происходит оптимизация возведения в степень -1 ? Такой код выполняется очень быстро
Код: plaintext
1.
pow(-1.0,1<<30).

Скорее всего нет оптимизации для возведения в степень -1.
pow(-1.0,1<<30) - константа, вычисляется во время компиляции
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032896
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla,

этот код так-же быстро выполняется
Код: plaintext
1.
2.
	int p; scanf("%i", &p);
	printf("\n%lf\n", pow(-1.0,p));



Такой код тоже быстро выполнится

Код: plaintext
1.
printf("\n%lf\n", pow(-1.0000001,1<<30));//ввод из потока ввода даёт аналогичный результат по времени, доли секунды



Возможно(вероятно) используется алгоритм быстрого возведения в степень. Асимптотическая сложность имеет вид логарифмической функции.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032905
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, попробуй выполнить с pow, потом с pow_m_1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
double res1 = 0, res2 = 0;
    for(int i=0; i < 1000000000; ++i)
    {
        //res1 += pow(-1.0, i);
        res2 += pow_m_1(i);
    }
    cout << res1 << endl << res2 << endl;
...
Рейтинг: 0 / 0
Точная арифметика.
    #39032969
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, на бесконечно большом диапазоне long double тебя заинтересовала оптимизация POW для аргумента -1.0 ?

К чему это? Хочешь сам себя перехитрить?
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033596
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSashaMercury, на бесконечно большом диапазоне long double тебя заинтересовала оптимизация POW для аргумента -1.0 ?

К чему это? Хочешь сам себя перехитрить?

Просто в базисных функция присутствует этот элемент.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033597
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla, время как-то криво измеряется(я видимо что-то не так делаю). Но стандартная функция заметно дольше выполняется

Код: plaintext
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.
#include <math.h>
#include <stdio.h>
#include <time.h>

long double pow_m_1(int p)
{
	return (p & 1) ? -1.0 : 1.0;
}


int main()
{
	unsigned int start_time = clock();
	double res = 0;
	for (int i = 0; i < 1<<30; ++i) {
		res += pow_m_1(-1.0);
	}
	unsigned int end_time = clock();
	unsigned int search_time = (end_time - start_time)/1000;
	printf("test1 my pow %i search time=%u\n", res, search_time);

	start_time = clock();
	res = 0;
	for (int i = 0; i < 1<<30; ++i)
    {
		res += pow(-1.0, i);//pow_m_1(i);
	}
	end_time = clock();
	search_time = (end_time - start_time)/1000;
	printf("test 2 st pow %i search time=%u\n", res, search_time);
	return 0;
}
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033603
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел написать для тестирования функцию, которая принимает указатель на функцию, но не получилось. Потому что моя функция имеет один параметр, а стандартная 2
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033788
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще синус можно захардкодить. Для 0 градусов, 30, 45, 60, 90.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033880
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕще синус можно захардкодить. Для 0 градусов, 30, 45, 60, 90.лень лезть в исходники crt, но в этом нет ничего невозможного, кмк ))
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033965
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmaytonЕще синус можно захардкодить. Для 0 градусов, 30, 45, 60, 90.лень лезть в исходники crt, но в этом нет ничего невозможного, кмк ))
Невозможного нет. А есть ли необходимость?
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033976
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНевозможного нет. А есть ли необходимость?оптимизация, брат )) зачем считать, когда ответ заранее известен?
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033985
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Етить-колотить! Это ломает мои представления о Math.Libraries.

P.S. Помниться мы с Базистом рассуждали о том как любую функцию задать таблично
и прогрузить ее в Стебелёк. Эх... славное было времечко. Мдя.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39033994
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тригонометрические функции давно захаркорены . А как уж там оно в проце реально считается - тайна покрытая мраком, может и правда таблицы Брадиса забиты.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39034010
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТригонометрические функции давно захаркорены . А как уж там оно в проце реально считается - тайна покрытая мраком, может и правда таблицы Брадиса забиты.
Считаются они через ряды Тейлора (или Лорана).

Да захардкодены. Но это compiller depends. Может быть использована как команда FPU так
и реализация под длинную арифметику на современных наборах команд.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39034018
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По повод Брадиса. Предлагаю помедитировать над сорцами одной игрушки.

https://github.com/id-Software/DOOM/blob/master/linuxdoom-1.10/tables.c
https://github.com/id-Software/DOOM/blob/master/linuxdoom-1.10/tables.h
...
Рейтинг: 0 / 0
Точная арифметика.
    #39034037
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПо повод Брадиса. Предлагаю помедитировать над сорцами одной игрушки.
В те времена сопроцессор для мат.расчетов был необязательной опцией. Да и процы большой скоростью не отличались.
...
Рейтинг: 0 / 0
Точная арифметика.
    #39034540
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто оставлю это здесь
фиксед поинт
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Точная арифметика.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]