Когда нормализуется только один знак, то там все просто: 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, но только если оно до того было нормализовано на одну степень большей точностью.
выходит что если при расчетах число было нормализовано с большей точностью и в последующих расчетах нормализовать это число с меньшей точностью то получим результат отличающийся от просто нормализованного этого числа до меньшей точности.
выходит что если при расчетах число было нормализовано с большей точностью и в последующих расчетах нормализовать это число с меньшей точностью то получим результат отличающийся от просто нормализованного этого числа до меньшей точности.
Выше такие действия и были названы "мухлежом")) Математика, хоть и точная наука, но все равно должна применяться с пониманием. 2 + 3 = 5, а вот если 2 ведра плюс 3 курицы, то 5 уже не выйдет ))
- в одном случае получаю правильно округленное значение 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.06-0.02" получить "0.04", а при "0.06-0.024" получить "0.036".
Потому-что равно 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