Если я пытаюсь скопировать программу на другом языке. Разве неразумно использовать больше точности?

Я нахожусь в процессе преобразования программы из кода Scilab в C ++, и мне важно сохранить результаты, полученные Scilab.

Мне известно, что Scilab использует двойную точность IEEE 754 и что двойные C ++ (хотя и не обязательны) реализованы аналогичным образом.

Это плохая идея использовать более высокую точность (например, long double) в C ++, если я пытаюсь точно соответствовать результатам Scilab?

Например: Возможно ли для Scilab рассчитать число, равное 0,1234, тогда как в C ++ с использованием длинных двойных чисел число будет равно 0,12345. Таким образом, возможно создание дисперсии, которая приведет к созданию двух программ разные результаты (хотя и более точные в C ++).

0

Решение

Да, это абсолютно возможно.

Но поскольку числа с плавающей запятой никогда не бывают абсолютно точными, вы должны разработать свой алгоритм с учетом этого и постараться избежать того, чтобы эти «ошибки округления» привели к потере вычислений через некоторое время.

Более того, как уже отмечалось в комментариях: не ожидайте, что ваша C ++ -программа выдаст те же результаты, что и программа Scilab, особенно если она настолько важна для небольших изменений. Вот почему большинство численного моделирования являются точными только до некоторого предела, прежде чем они начнут давать «неправильные» результаты.

Чтобы дать вам несколько полезных советов, в C ++ есть очень полезная опция typedefs. Используйте typedef как typedef long double myFloatType и только использовать myFloatType для ваших расчетов (придумайте лучшее имя, которое на самом деле больше говорит о том, для чего оно здесь используется!).
Затем вы можете легко изменить его, просто изменив одну строку кода, и сравнить результаты.

Если разница значительна, стоит подумать о лучшем алгоритме.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]