IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Значение введенной десятичной дроби не совпадает с ее выводом, Это нужно для перевода из десятичной дроби в обыкновенную
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Мария

Репутация: -  0  +


Доброго времени суток уважаемые форумчане! Столкнулась с проблемой, из-за которой не могу двигаться дальше.
Подзадача: Вводится любая десятичная дробь, с любым количеством знаков до и после запятой. Перевести ее в обыкновенную, т.е. вида (a/b).
Все казалось бы очень просто, вот только введенная десятичная дробь, даже если ничего с ней не делать, не совпадает с выводом этой же дроби, появляются какие-то лишние цифры.
Отсюда, как следствие:
Int(x)+Frac(x) не равняется х!
Кто знает, подскажите, что нужно сделать, чтобы Паскаль не добавлял лишние цифры к введенной десятичной дроби?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Вы спользуете тип real, а работа с вещественными числами обладает своей спецификой.
Например вещественные числа нельзя сравнивать напрямую а=b, они сравниваются abs(a-b)<eps.
Поскольку значения вещественного типа являются приблизительными, результат сравнения значений различного вещественного типа не всегда можно предсказать. Например, если Х - переменная вещественного типа с одинарной точностью, а Y - переменная вещественного типа с двойной точностью, то результатом выполнения следующих операторов будет значение False:
X := 1/3;
Y := 1/3;
Writeln(X = Y);

Причина этого состоит в том, что Х имеет точность только до 7-8 цифр, а Y - точность до 15-16 цифр, и когда оба значения преобразуются к типу с повышенной точностью, то после первых 7-8 цифр остальные цифры будут различаться. Аналогично, результатом выполнения операторов:

X := 1/3;
Writeln(X = 1/3);

будет значение False, результат 1/3 в операторе Writeln вычисляется с точностью до 20 значащих цифр.


Поэтому единственный способ, который мне щас приходит в голову, это создавать массив целых чисел, записывать туда ваще число и работать с с ним.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Мария

Репутация: -  0  +


Большое спасибо, Krjuger )))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.06.2024 16:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name