4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
|
|
1 | |
Вещественные числа с плавающей точкой, точность вычислений07.06.2012, 12:31. Показов 19197. Ответов 70
Метки нет (Все метки)
Работаю над проектом, требующим большую точность вычисления вещественных чисел.
Решила использовать long double в надежде получить точность побольше. Столкнулась с тем, что C++ Builder просто отказывается давать желаемую точность. Точность необходима до 10^20. То есть до 20 числа после запятой. Подскажите пожалуйста как решить данную проблему.
0
|
07.06.2012, 12:31 | |
Ответы с готовыми решениями:
70
Точность числа с плавающей точкой Максимальная точность для чисел с плавающей точкой Представить вещественные числа в четырёхбайтовой ячейке памяти в формате с плавающей точкой В текстовом файле записаны вещественные числа с плавающей точкой. Преобразовать файл, заменив каждое число, округленным |
08.06.2012, 17:39 | 24 | |||||
Код
$ gcc t.c $ ./a.out ld1=1.0000000000000000001084202 <--- отличается от 1.0 ld2=1.0000000000000000000000000 <--- совпадает с 1.0
0
|
08.06.2012, 17:55 | 25 | |||||
Ага понял...
Код
Текущая кодовая страница: 1251 ld1=1.0000000000000000001000000 ld2=1.0000000000000000000000000 dif=0.0000000000000000000000000 Для продолжения нажмите любую клавишу . . . Но тогда проблема в вычислении самих чисел а не логарифма их разности. Т.е как они вычилсяются?
0
|
08.06.2012, 18:23 | 27 |
Ну это целый паровоз проблем, которые зацепляются одна за другую. Сначала делается разность двух чисел, которые очень мало отличаются и эта разность становится либо равной нулю, либо вычисляется с очень большой погрешностью
Чему равен sizeof (long double)? Ну и попробуй поиграть порядком. Не -19, а -15 и т.п.
0
|
08.06.2012, 19:08 | 28 |
Добавлено через 3 минуты Поэтому вопрос в том как вычисляются эти числа и можно ли это обойти как нибудь.
0
|
08.06.2012, 19:15 | 29 |
На builder'е правильный long double, на VS2010 - неправильный. Либо это в настройках как-то можно подправить, либо в express edition (если у тебя именно оно) микрософтовцы намерено так сделали. Т.е. сейчас у тебя VS работает как старые компиляторы, т.е. long double эквивалентен double
Вычисляются согласно стандарту. Для float и double это IEEE-754, для 80-битного long double га intel'е - IEEE-854. В любом случае так работает аппаратура и с этим уже ничего не поделать. Кроме использования специальных библиотек, которые эмулируют ещё бОльшую точность
0
|
08.06.2012, 20:01 | 30 | |||||
Добавлено через 3 минуты Добавлено через 38 минут
0
|
08.06.2012, 22:03 | 31 |
Если вопрос в том, как их хранить - то никак. Если нет представления о том, как хранятся плавающие числа - можешь почитать объяснение на пальцах.
Ты можешь хранить два отдельных слагаемых в двух разных переменных: a=1 и b=10^-20. Если потом тебе надо будет вычесть 0.999, то ты это представишь как a=(1 - 0.999) и b=10^-20. По другому никак - формат хранения чисел тебе этого сделать не позволит
1
|
08.06.2012, 22:11 | 32 |
( например если разкладывать в ряд то члены ряда можно хранить в векторе ну это зависит от конкретного случая) А какие есть библиотеки для таких случаев для С++? А то что-то не нагуглил...
0
|
08.06.2012, 23:35 | 33 |
Поискал по "huge float point". Наткнулся на
http://gmplib.org/ http://www.mpfr.org/ http://www.nongnu.org/hpalib/
2
|
08.06.2012, 23:44 | 34 |
http://axsm.blogspot.com/2010/... mingw.html
http://agapii.ucoz.ru/publ/sbo... ws/1-1-0-7 Добавлено через 4 минуты Тема осталась пуста gmp+builder 6.0
0
|
09.06.2012, 00:38 | 35 |
Нашел уже скомпилиные либы под некоторые компиляторы http://www.cs.nyu.edu/exact/core/gmp/
Подключить их не под Builder не под Visual не получилось... Builder на мой взгляд выдает что то критичное ( использовал dll для VC перековертив их в lib)
0
|
09.06.2012, 00:47 | 37 |
1
|
4 / 4 / 0
Регистрация: 15.10.2010
Сообщений: 71
|
|
09.06.2012, 00:49 [ТС] | 38 |
Теперь ещё с этим всем разобраться.
Спасибо!
0
|
09.06.2012, 15:46 | 40 |
На всякий случай. Тему переместили и открыли
0
|
09.06.2012, 15:46 | |
09.06.2012, 15:46 | |
Помогаю со студенческими работами здесь
40
Преобразование чисел с плавающей точкой в числа с фиксированной точкой Точность вычислений в double (Обрезание числа) Числа с плавающей точкой Числа с плавающей точкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |