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

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

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

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





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

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


Доброго времени суток уважаемые форумчане! Столкнулась с проблемой, из-за которой не могу двигаться дальше.
Подзадача: Вводится любая десятичная дробь, с любым количеством знаков до и после запятой. Перевести ее в обыкновенную, т.е. вида (a/b).
Все казалось бы очень просто, вот только введенная десятичная дробь, даже если ничего с ней не делать, не совпадает с выводом этой же дроби, появляются какие-то лишние цифры.
Отсюда, как следствие:
Int(x)+Frac(x) не равняется х!
Кто знает, подскажите, что нужно сделать, чтобы Паскаль не добавлял лишние цифры к введенной десятичной дроби?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 11.11.2012 14:59
Сообщение #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 
 К началу страницы 
+ Ответить 
Somebody of the crowd
сообщение 11.11.2012 16:23
Сообщение #3





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

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


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

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

 



- Текстовая версия 20.06.2024 16:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"