Название: QT проблемы с double Отправлено: dimka8 от Июнь 02, 2016, 23:03 доброго времени суток. возникла такая делема
Код: QVector<double> as; Название: Re: QT проблемы с double Отправлено: kambala от Июнь 02, 2016, 23:43 попробуй записывать через QDataStream.
а ты через hex редактор смотришь файл или потом при чтении так выводит? Название: Re: QT проблемы с double Отправлено: Igors от Июнь 03, 2016, 07:41 такая проблема . при проверке число 54.25 , а записывает в файл 54.249999 . как это можно исправить? Проблемы нет, так устроены флоты. Для проверки Вы округляете до 2 знаков, для записи нет,Пример Код При каком "a" будет печататься Oba-na ? :) Название: Re: QT проблемы с double Отправлено: dimka8 от Июнь 03, 2016, 11:33 С QDataStream вообще цифры не правдоподобные получаются !! и в начале было
Код: ui->label->setText(QString::number(a)); Название: Re: QT проблемы с double Отправлено: Igors от Июнь 03, 2016, 12:18 проверяю файл в hex редакторе Судя по коду стартового поста Вы пишете двоичные данные (не текст). Поэтому если в heх Вы видите "строку" - значит сам редактор ее и напечатал, используя свои правила округления. Это нормально, многие отладчики тоже не показывают флот число как оно было присвоено. Число правильное, просто округляется по-разному при переводе в текст в разных приложениях. Выведите его при чтении так же как при записи - увидите то же самое. да ,еще я точно знаю ,что отображение числа при проверке верное "Совершенно верно" отображаются только очень немногие флот-значения (для которых бьется степень двойки). Для остальных хранится их ближайшее представление. Напр если Вы увидели "23.450000" - это совсем не значит "верно", там еще есть ненулевые цифры справа (просто они не печатаются). Ближайшее оказалось больше исходного. А вот для 54.25 ближайшее меньше - вот и пошли девяткиНазвание: Re: QT проблемы с double Отправлено: dimka8 от Июнь 03, 2016, 14:45 то-есть это нормально и решить эту проблему невозможно ?
Название: Re: QT проблемы с double Отправлено: __Heaven__ от Июнь 03, 2016, 14:49 Это не проблема. Это двойная точность. Можете использовать long double для повышения точности (не советую).
Название: Re: QT проблемы с double Отправлено: __Heaven__ от Июнь 03, 2016, 14:51 Вот чтиво (https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C). Есть ещё одна страшная проблема. double нельзя сравнивать между собой операторами ==, != :)
Запись производится как sign * 2^exponent * mantissa Название: Re: QT проблемы с double Отправлено: Igors от Июнь 03, 2016, 15:49 то-есть это нормально и решить эту проблему невозможно ? "Знову за рибу грошi" :'( Нет никакой "проблемы" - просто 2 приложения печатают (округляют) одно и то же число по-разному Есть ещё одна страшная проблема. double нельзя сравнивать между собой операторами ==, != :) Да неужели? Код Печатает true.. хмм... вроде верно :) Название: Re: QT проблемы с double Отправлено: __Heaven__ от Июнь 04, 2016, 01:23 Игорь, ваши методы программирования несомненно самые лучшие! Когда уже книгу напишете?
Название: Re: QT проблемы с double Отправлено: Igors от Июнь 04, 2016, 11:06 Игорь, ваши методы программирования несомненно самые лучшие! Когда уже книгу напишете? Ну, вот немного освобожусь.. :)Кстати Это не проблема. Это двойная точность. Двойная/тройная точность здесь ни при чем. Для double "шаг" меньше чем для float, но все равно хранимое число или больше или меньше заданного. |