Огромное спасибо разработчикам, что у нас есть возможность изучать Паскаль. Но есть вопрос. Рассмотрим программу демонстрирующую неточность хранения действительных чисел в формате с плавающей запятой.
int main()
{
double a, b, c;
a = 0.1;
b = 0.2;
c = 0.3;
if(a + b == c)
cout << "ok";
else{
cout << ":(";
cout.precision(20);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "a + b = " << a + b << endl;
cout << "c = " << c << endl;
}
}
Данная программа хорошо показывает специфику работы с числами с плавающей запятой. Хотел своим школьникам показать на Паскале. И, хотя очевидно, что числа хранятся не точно, команда write никак не хочет это показать.
var a, b, c: double;
Begin
a := 0.1;
b := 0.2;
c := 0.3;
if a + b = c then
write('ok')
else begin
writeLn(':(');
writeLn('a = ', a:0:20);
writeLn('b = ', b:0:20);
writeLn('a + b = ', a + b:0:20);
writeLn('c = ', c:0:20);
end
End.
Можно ли как-то модифицировать программу, что бы команда write работала точно? Или очень хотелось бы узнать от авторов, как команда write на самом деле работает, какие идеи были заложены в её реализацию при выводе чисел в формате с плавающей запятой, что бы было понятно, почему это видно на С++, но не видно в Паскале.
Заранее огромное спасибо.
Институт математики, механики и компьютерных наук ЮФУ, 2005–2021