Как убедиться, что у вас нет проблем: узнайте о арифметических задачах с плавающей точкой, или наймите кого-нибудь, кто имеет, или используйте здравый смысл.
Первая проблема - точность. Во многих языках у вас есть «float» и «double» (двойное положение для «двойной точности»), и во многих случаях «float» дает вам точность около 7 цифр, в то время как double дает вам 15. Здравый смысл заключается в том, что если у вас есть В ситуации, когда точность может быть проблемой, 15 цифр намного лучше, чем 7 цифр. Во многих слегка проблемных ситуациях использование «double» означает, что вам это сойдет с рук, а «float» означает, что вы этого не сделаете. Допустим, рыночная капитализация компании составляет 700 миллиардов долларов. Представьте это в формате с плавающей запятой, и младший бит составляет $ 65536. Представьте его, используя double, а младший бит составляет около 0,012 цента. Поэтому, если вы действительно, действительно не знаете, что делаете, вы используете double, а не float.
Вторая проблема в большей степени принципиальная. Если вы делаете два разных вычисления, которые должны давать один и тот же результат, они часто этого не делают из-за ошибок округления. Два результата, которые должны быть равны, будут «почти равны». Если два результата близки друг к другу, то реальные значения могут быть равны. Или они могут не быть. Вы должны помнить об этом и должны писать и использовать функции, которые говорят «x определенно больше, чем y» или «x определенно меньше, чем y» или «x и y могут быть равны».
Эта проблема становится намного хуже, если вы используете округление, например, «округлить x до ближайшего целого числа». Если вы умножите 120 * 0,05, результат должен быть 6, но вы получите «некоторое число, очень близкое к 6». Если затем вы «округлите до ближайшего целого числа», это «число, очень близкое к 6», может быть «немного меньше 6» и округлено до 5. И обратите внимание, что не имеет значения, насколько точна ваша точность. Не имеет значения, насколько близок к 6 ваш результат, если он меньше 6.
И в-третьих, некоторые проблемы сложны . Это означает, что нет простого и быстрого правила. Если ваш компилятор поддерживает «long double» с большей точностью, вы можете использовать «long double» и посмотреть, имеет ли это значение. Если это не имеет значения, то либо у вас все в порядке, либо у вас есть действительно сложная проблема. Если это имеет значение, которое вы ожидаете (например, изменение с 12-го знака после запятой), то вы, вероятно, в порядке. Если это действительно меняет ваши результаты, то у вас есть проблема. Просить помощи.