Огромное спасибо разработчикам, что у нас есть возможность изучать Паскаль. Но есть вопрос. Рассмотрим программу демонстрирующую неточность хранения действительных чисел в формате с плавающей запятой.
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 на самом деле работает, какие идеи были заложены в её реализацию при выводе чисел в формате с плавающей запятой, что бы было понятно, почему это видно на С++, но не видно в Паскале.
Заранее огромное спасибо.