Страница 1 из 1

Запись в файл и чтение

Добавлено: Вс сен 01, 2013 7:18 pm
алексей_алексей
Для сохранения результатов и экономии времени счёта, решил использовать запись на диск. Проверка показала, что всё, вроде, работает, но потом заметил, стала существенно теряться точность. Оказалось, при записи-чтении пропадают значащие цифры – на их месте появляются 0-ли. В опциях задавал точности округления и вывода, но по сути ничего не менялось. Происходит это при использовании двух разных операторов, только в одном случае пропадает больше цифр, а в другом меньше. Как сделать, чтобы писалось и читалось одно и то же?

Код: Выделить всё

restart:
x := 11.1111111111;
Q := fopen("E:\\rezz.txt", WRITE):
fprintf(Q, "%e \n", x):
fclose(Q):
Q := fopen("E:\\rezz.txt", READ):
y := op(fscanf(Q, " %e\n"));
fclose(Q):

x:=11.1111111111
y:=11.1111100000



Код: Выделить всё

restart:
x := 11.1111111111;
writedata("E:\\rezzz.txt", [x]):
y := op(readdata("E:\\rezzz.txt", 1));


x:=11.1111111111
y:=11.1111111100

Digits

Добавлено: Вс сен 01, 2013 9:18 pm
Markiyan Hirnyk
Во втором случае работает модификация
restart; Digits := 20: x := 11.1111111111;
writedata("D:\\rezzz.txt", [x]);
y := op(readdata("D:\\rezzz.txt", 1))

11.1111111111
11.1111111111

MaplePrimes

Добавлено: Вт сен 03, 2013 7:10 pm
Markiyan Hirnyk
Алексей Борисович! Спросите на MaplePrime.

Re: MaplePrimes

Добавлено: Вт сен 03, 2013 8:02 pm
алексей_алексей
Спасибо. Хотел обойтись первым вариантом по причине его простой и понятной реализации. Вторым вариантом для работы не пользовался – только проверил на совпадение цифр. Скорее всего, буду осваивать его, раз он воспринимает существующее количество цифр. Для этого уже немного разобрался, как writedata и readdata работают с array.
А на том форуме мне всё-таки трудно общаться…

Re: MaplePrimes

Добавлено: Вт сен 03, 2013 8:45 pm
Markiyan Hirnyk
алексей_алексей писал(а):Спасибо.
А на том форуме мне всё-таки трудно общаться…
Сформулируйте вопрос на русском языке, я переведу его.

Re: Запись в файл и чтение

Добавлено: Вт сен 03, 2013 9:12 pm
алексей_алексей
Так вот же, записываю число с нужным количеством цифр, а после прочтения получаю 0-ли после 7-ми цифр. И ещё, 7-мая цифра округляется по 8-мой, которой уже нет. Digits и опции в инструментах влияния на процесс не оказывают. А что оказывает, непонятно…

Код: Выделить всё

restart:
x := 111111289;
Q := fopen("E:\\rezz.txt", WRITE):
fprintf(Q, "%e \n", x):
fclose(Q):
Q := fopen("E:\\rezz.txt", READ):
x := op(fscanf(Q, " %e\n"));
fclose(Q):

Re: Запись в файл и чтение

Добавлено: Вт сен 03, 2013 9:15 pm
Markiyan Hirnyk
алексей_алексей писал(а):Так вот же, записываю число с нужным количеством цифр, а после прочтения получаю 0-ли после 7-ми цифр. И ещё, 7-мая цифра округляется по 8-мой, которой уже нет. Digits и опции в инструментах влияния на процесс не оказывают. А что оказывает, непонятно…

Код: Выделить всё

restart:
x := 111111289;
Q := fopen("E:\\rezz.txt", WRITE):
fprintf(Q, "%e \n", x):
fclose(Q):
Q := fopen("E:\\rezz.txt", READ):
x := op(fscanf(Q, " %e\n"));
fclose(Q):
Алексей Борисович! Пожалуйста, сформулируйте Ваш вопрос четко, коротко и ясно. Не смешите людей. Искренне, М. Г.

Добавлено: Вт сен 03, 2013 9:41 pm
алексей_алексей
Спасибо за помощь, Маркиян Алексеевич. Как-нибудь справимся сами, как говорится, с шутками и прибаутками. И впредь, пожалуйста, ни по какому поводу не привлекайте своё внимание к моей персоне.

Ответы на MaplePrimes

Добавлено: Ср сен 04, 2013 2:08 pm
Markiyan Hirnyk
Перевопросив оное на MaplePrimes http://www.mapleprimes.com/questions/15 ... rid=468593 ,
получил ответы
restart; Digits := 20:
x := 11.1111111111;
Q := fopen("D:\\rezz.txt", WRITE):
fprintf(Q, "%13.11e\n", x):
fclose(Q):
Q := fopen("D:\\rezz.txt", READ):
y := op(fscanf(Q, " %e\n"));
fclose(Q):

11.1111111111
11.1111111111

и
restart;
x := 11.1111111111;
Q := fopen("D:\\rezz.txt", WRITE):
fprintf(Q, "%a \n", x); fclose(Q):
Q := fopen("D:\\rezz.txt", READ):
y := op(fscanf(Q, " %a\n"));
fclose(Q):

11.1111111111
11.1111111111