?

Log in

No account? Create an account
Есть у меня внучка. Нормальная такая девчонка, смышленая...… - «Маразмания» — ЖЖ [entries|archive|friends|userinfo]
Маразмания

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

[апр. 1, 2013|09:36 pm]
Маразмания

ru_marazm

[nyuranny]
[Настроение |blahblah]






Есть у меня внучка. Нормальная такая девчонка, смышленая... Пришла вся в слезах. Боится показаться родителям на глаза, поэтому и прибежала к деду. Спрашиваю, что случилось. Говорит, что из-за оценки. Получила тройку и не знает за что.
-Давай,- говорю,- разбираться.
Смотрю... нихера не понимаю.

Вспоминаю правила. Помню что то вроде "от перемены слагаемых сумма не меняется", но это применительно к сложению. А может в умножении что то по другому. Хотя...
Может дело в порядке записи действий в решение? В моё счастливое школьное время, действия задачи записывались в решение в том порядке, в котором они появлялись в условии задачи.
Читаю: "... 9 покупателей... по 2 литра молока". Все правильно- 9 * 2.

Однако учитель настаивает на обратном. Он хочет два литра молока умножить на девятерых покупателей (2 * 9).
Напрашивается несколько вариантов вывода:
-В этом и заключается реформа образования;
-У учителя весеннее обострение;
-"... лыжи не едут, или я ебанутый"©

АПД: мопед не мой, нашла в интернете

АПД2:
СсылкаОтветить

Comments:
[User Picture]From: dil
2013-04-03 03:28 pm
Двух вряд ли, а вот трёх вполне. Вот программа на си:
#include <stdio.h>
float f(float a,float b,float c) {
  float d=a;
  d *= b;
  d *= c;
  return d;
}
int main(void) {
 float a = 123456792.0;
 float b = 0.0000001;
 float c = 10000000.0;
 float r1 = f(a,b,c);
 float r2 = f(a,c,b);

 printf("%f\n%f\n", r1, r2);
 return 0;
}


По арифметике число, умноженное на 10 миллионов и на одну десятимиллионную в любом порядке, вообще измениться не должно. По факту оно изменяется:
123456792.000000
123456800.000000


(Ответить) (Parent) (Thread)
[User Picture]From: red_valjok
2013-04-03 09:35 pm
> Двух вряд ли, а вот трёх вполне

Зачем вам первое умножение? Вы прямо говорите: первое умножение нужно только для того чтобы получить разные множетели во втором умножении. То есть вместо первого умножения сойдёт любая другая операция. Можно просто взять два разных числа. Это самый простой способ доказать некоммутативность умножения ;)

Чё-то подводита вас ваша практика. Оказывается что она соответствует идеалу даже в операциях сплавающей запятой. Учитель одобряет ваше рвение запудрить людям мозги ;)
(Ответить) (Parent) (Thread)
[User Picture]From: dil
2013-04-03 10:41 pm
Таки читайте ВНИМАТЕЛЬНО.
В обоих случаях все три множителя ОДИНАКОВЫЕ. Разный только порядок их умножения.
(Ответить) (Parent) (Thread)
[User Picture]From: red_valjok
2013-04-03 11:00 pm
(a*b)*c и (a*c)*b


Вся ваша "некоммутативность" потому что умножаются два разных числа, не x*y сравнивается с y*x, а x1*y != x * y2. С таким же успехом можно было бы сразу брать x1 вместо x. Но вы этого не делаете. Потому что это не создаст должного впечатления на людей. На деле вы демонстрируете свойство неумения плавающей точки представлять целые числа, к умножению не имеющие никакого отношения. Так что поучитесь сами сперва внимательносте перед тем как будете искать невнимательность у других.
(Ответить) (Parent) (Thread)
[User Picture]From: dil
2013-04-04 09:44 am
Да, в процессе получения результата множители на разных этапах получаются разные. Очевидно, что b не равно c, поэтому и a*b, полученное после первого умножения, не равно a*c, и на втором этапе множители тоже разные.
Но в конечном итоге умножаются три ОДНИХ И ТЕХ же числа. Несмотря на возможные ошибки при переводе в машинное представление, исходные числа были одни и те же, и по правилам математики конечные результаты должны получиться одинаковые.

А получаются разные. Из-за потери точности в машинном представлении _промежуточных результатов_, что и приводит к некоммутативности умножения. Вот об этом я с самого начала и писал, такая некоммутативность - одно из последствий потери точности. Не единственное, не всегда проявляющееся, но я и не ставил задачу полностью описать все тонкости разнообразных вариантов машинного представления чисел и ошибок в них.

Заметьте, я нигде не упоминал о некоммутативности при перемножении двух чисел.
(Ответить) (Parent) (Thread)
[User Picture]From: zban
2013-04-04 09:57 am
Спасибо, но с перемножением трёх чисел -- это классика) А вот с двумя я помыслить не могу, чтобы результат (машинного) умнажения отличался в зависимости от порядка.
(Ответить) (Parent) (Thread)