Я пишу программу на C ++ и, пытаясь исправить ошибку, выделил раздел моей основной программы в отдельный файл. Я позвоню в основную программу Prog1 и разделенный раздел Prog2.
Мне удалось успешно найти и исправить ошибку в Prog2, и я скопировал изменения в Prog1. Когда я запускаю все, две программы выдают один и тот же результат IFF единственный тип данных, который я использую в обеих программах, это тип double
,
Я надеялся изменить все пары long double
для повышения точности, но при этом вывод Prog1 немного отличается от Prog2.
Я думаю, что это проблема продвижение потому что некоторые вычисления в Prog1 используют длинные двойники, тогда как в Prog2 я иногда просто использую литералы. Например:
Prog1:
long double num = 1.0;
value1 = num + 2.0;
Prog2:
value2 = 1.0 + 2.0;
Где результаты value1
а также value2
не будет точно равен (см .: Математика с плавающей точкой нарушена?).
Теперь я мог бы просто изменить каждый литерал в обеих программах, чтобы набрать long double
(например. 1.0L
) затем посмотрите, совпадают ли результаты, но, к сожалению, это легче сказать, чем сделать (есть много).
Итак, мой вопрос:
Поскольку вывод двух моих программ в точности совпадает при использовании double, можно ли предположить, что Prog1 работает правильно, если Prog2 работает? Даже если результаты отличаются при использовании длинных пар?
Задача ещё не решена.
Других решений пока нет …