Между данными, записанными в выходной файл, нет разделителей. С учетом 1,234 и 5,687
ofile<<setprecision(15)<<q;
запишет 1,2345,678 в выходной файл. Все ваши номера объединяются в один большой шарик. При обратном чтении
ifile>>w;
не знает, где должен заканчиваться один номер и должен начинаться следующий. В результате он читает до тех пор, пока if не найдет символ, который не может быть частью double
.
например. 1.2345.678 будет считан до 1.2345, где он найдет секунду '.'
. Числа с плавающей точкой не могут иметь 2 десятичных знака (даже если это double
), поэтому анализатор останавливается, оставляя 0,68 в потоке для следующего чтения и возвращает 1,2345. В следующий раз около .678 читается и возвращается как 0,678.
Самая значимая цифра теперь загадочным образом исчезла, и, поскольку double
хорош только до 15 цифр, вы, вероятно, не заметите, что он был привязан к предыдущему числу как 16-е число git.
Возможное решение: запишите пробел после каждого числа.
ofile<<setprecision(15)<<q << ' ';