Другие языки программирования и технологии

Вопрос по паскалю

Почему когда в паскале пишешь write(exp(ln(3))), то он отвечает 3, а если написать:

if exp(ln(3)) = 3 then
write('да')
else
write('нет')

то он отвечает "нет".
Так exp(ln(3)) = 3 или нет?!
Потому что компьютер не работает с числами. Он работает с моделями чисел - условными их кодами, представляющими числа не точно, а с некоторой конечной точностью. Логарифм трех - число с бесконечным числом знаков после запятой, компьютер его округляет где-то до десяти знаков после запятой. Потом он находит экспоненту от округленного числа, естественно, это не точно 3. Поэтому и введен отдельный тип целых чисел - они кодируются точно, их не округляют. Но целыми числами часто не обойдешься. И если тебе надо сравнивать вещественные числа, то это надо делать, например, так
if abs(exp(ln(3))-3)/3< 1e-8 then ...
Например, программа
begin writeln(3/5*5=3); readln end.
выдаст false, потому что в компьютере 3/5*5 не равно точно 3 ( 0,6 в двоичной системе имеет бесконечное число знаков после запятой ).
Этому учат программистов, но не учат в школах. Существует много и других подводных камней, например, даже квадратное уравнение в вычислительной математике полагается решать по другим формулам, чем школьные, поскольку школьные из-за возможного вычитания близких чисел могут приводить к большой погрешности.
Перед изучением собственно программирования следовало бы учить вычислительную математику, поэтому то, чему учат в школе, не годится для практического использования - возможны ошибки из-за незнания важных тонкостей.
СЗ
Сергей Зайцин
56 928
Лучший ответ
Да, странно, видимо есть какая-то дробная часть очень маленькая... )

Попробуй вот так:)) )

var a,b:real;
begin
a:=exp(ln(3));
b:=3;
writeln(a:1:17);
writeln(b:1:17);
end.

Разница присутствует:
3.00000000000000064
3.00000000000000000
попробуй then и else заключить в операторные скобки.
Если результат вычисления - не целое число, то такое может случаться из-за маленькой разницы в "хвостах" чисел.
Пример: (2.999999999 = 3) = false.
а что правда есть город шестипальцевск?
где он находится?