Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Потому-что равно 0.6, поэтому 0.5 получается только путем мухлежа.
если 'v1' вставить любое число тогда видно что до 'i = 2' все округляется правильно.
если 'v1' вставить любое число тогда видно что до 'i = 2' все округляется правильно.
Когда нормализуется только один знак, то там все просто: 0, 1, 2, 3, 4 -> 0, а 5, 6, 7, 8, 9 -> 1
Если нормализуется два знака, то в расчет принимаются двузначные числа: 0 - 49 -> 0, а 50 - 99 -> 1. Ведь если число 1.49 нужно округлить до целых, то неужели должны получить 2, до которого 51-а сотая против имеющихся 49-и сотых расстояния до 1?
Тоже самое с трехзначными, четырехзначными и т. д.
Но 1.45 и округляется до 2, но только если оно до того было нормализовано на одну степень большей точностью.
v1 = 0 = 1.0000000, v2 = 0 = 2.0000000
v1 = 1 = 1.5000000, v2 = 1 = 1.5000000
v1 = 2 = 1.4500000, v2 = 2 = 1.4600000
v1 = 3 = 1.4550000, v2 = 3 = 1.4550000
выходит что если при расчетах число было нормализовано с большей точностью и в последующих расчетах нормализовать это число с меньшей точностью то получим результат отличающийся от просто нормализованного этого числа до меньшей точности.
выходит что если при расчетах число было нормализовано с большей точностью и в последующих расчетах нормализовать это число с меньшей точностью то получим результат отличающийся от просто нормализованного этого числа до меньшей точности.
Простите, но как же получать нужные значения?
Если пользоваться рекомендованными функциями, то:
- в одном случае получаю правильно округленное значение
0.06-0.02 = NormalizeDouble(0.03999999999999999,2) = 0.04
Деление выполняется приближенно и без нормализации не обойтись.
- во втором случае получаю тоже округление, но в данном случае оно не нужно
0.06-0.024 = NormalizeDouble(0.036,2) = 0.04
Здесь нормализация (округление) не требуется.
Но как мне правильно нормализировать, а не округлять значения?
Простите, но как же получать нужные значения?
Для этого просто стоит сформулировать, что такое "нужные значения" ))
Если пользоваться рекомендованными функциями, то:
- в одном случае получаю правильно округленное значение
0.06-0.02 = NormalizeDouble(0.03999999999999999,2) = 0.04
Деление выполняется приближенно и без нормализации не обойтись.
- во втором случае получаю тоже округление, но в данном случае оно не нужно
0.06-0.024 = NormalizeDouble(0.036,2) = 0.04
Здесь нормализация (округление) не требуется.
Но как мне правильно нормализировать, а не округлять значения?
По приведенному примеру видно, что Вы используете некий интуитивный алгоритм, при помощи которого определяете "нужность" нормализации. В первом случае имеет место бесконечная дробь, а во втором - конечная. Под это и подстраивайте свой алгоритм приведения вещественного числа к нужному виду.
Хотя самый простой способ - заранее определиться с необходимой точностью вычислений.
Для этого просто стоит сформулировать, что такое "нужные значения" ))
По приведенному примеру видно, что Вы используете некий интуитивный алгоритм, при помощи которого определяете "нужность" нормализации. В первом случае имеет место бесконечная дробь, а во втором - конечная. Под это и подстраивайте свой алгоритм приведения вещественного числа к нужному виду.
Хотя самый простой способ - заранее определиться с необходимой точностью вычислений.
Если надо получить 0.036 (3 знака после запятой), то и нормализовать надо до 3-ех знаков, а не до 2-ух.
Я ошибся, до 3-х знаков нужно нормализировать. Так получится сделать?
Я ошибся, до 3-х знаков нужно нормализировать. Так получится сделать?
Вот ваш код:
Вместо 2 поставить 3 и будет 0.036