компьютерщики
Nov. 12th, 2016 09:02 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вчера между делом помянул задачку - для int32 найти функцию f, чтобы f(f(x)) = -x
Один взялся. Сегодня за завтраком говорит мне: я понял, в чем дело. -x - не функция. Нет такой функции.
Ну заебись. Долго мне втирал, что минус икс определен неправильно, поэтому не существует. Для целых.
P.S. Куда я попал.
Один взялся. Сегодня за завтраком говорит мне: я понял, в чем дело. -x - не функция. Нет такой функции.
Ну заебись. Долго мне втирал, что минус икс определен неправильно, поэтому не существует. Для целых.
P.S. Куда я попал.
А вы говорите логика
Date: 2016-11-12 05:07 pm (UTC)no subject
Date: 2016-11-12 05:45 pm (UTC)no subject
Date: 2016-11-12 06:16 pm (UTC)no subject
Date: 2016-11-12 06:03 pm (UTC)no subject
Date: 2016-11-12 06:16 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 06:06 pm (UTC)no subject
Date: 2016-11-12 06:16 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 07:00 pm (UTC)(no subject)
From:no subject
Date: 2016-11-12 06:11 pm (UTC)Потому что INT_MIN влезает в int32, а -INT_MIN нет.
Если запретить числу быть INT_MIN, и -x становится функцией, и решения задачи появляются.
no subject
Date: 2016-11-12 06:17 pm (UTC)2. ну и какие же?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 06:37 pm (UTC)или f(x)=i x, где i = sqrt(-1).
no subject
Date: 2016-11-12 06:54 pm (UTC)а про i не догадался, хоть и не int32
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 08:18 pm (UTC)no subject
Date: 2016-11-12 08:30 pm (UTC)no subject
Date: 2016-11-12 08:55 pm (UTC)можно ли считать ответом, что-то типа f=i*x, где x=(а b), а i={{0 -1},{1 0}}, [а]=[b]=16bit
no subject
Date: 2016-11-12 08:59 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 09:51 pm (UTC)return (2<<32) + (x if abs(x) <= (1<<32) else -x)
All tests passed:
self.assertEqual(f(f(0)), -0)
self.assertEqual(f(f(1)), -1)
self.assertEqual(f(f(-(1<<31))), (1<<31))
self.assertEqual(f(f((1<<31)-1)), -(1<<31)+1)
no subject
Date: 2016-11-12 10:00 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 10:10 pm (UTC)если f(0)=f0!=0, то f(f0)=0 и f(f(f0))=f0!=-f0. противоречие. значит, f(0)=0.
если x!=0, то f(x)!=0 (иначе f(f(x))=0), и f(x)!=x (иначе f(f(x))=x).
положим f(x)=y, тогда f(y)=-x, f(-x)=-y, f(-y)=x.
итого, f разбивает все ненулевые целые числа на циклы из четырех. таких функций много. например, набор циклов {(1,2,-1,-2), (3,4,-3,-4), (5,6,-5,-6), ...} задает такую функцию на целых числах.
но для 32-битных чисел такой функции нет, потому что число таких чисел (без нуля) не делится на 4.
no subject
Date: 2016-11-12 10:15 pm (UTC)выходит, функции соображающих товарищей из комментов не проходят граничные условия
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-12 10:39 pm (UTC)(Мое пояснение: в такие подробности, как наличие континентов на Земле и Солнца в небе, вдаваться не надо; точность ответа по возможности в пределах 5 минут).
no subject
Date: 2016-11-12 11:58 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Не могу не вспомнить классику
Date: 2016-11-13 12:02 am (UTC)Тоже выдумал еврей
Только зачем? Вот непонятно...
Монады, монады, кругом одни монады!
no subject
Date: 2016-11-13 02:32 pm (UTC)no subject
Date: 2016-11-13 04:52 pm (UTC)no subject
Date: 2016-11-13 07:58 pm (UTC)Но в первом приближении как-то так:
int f(int x)
{
if(x == -1) return 1<<31;
if(x == 1<<31) return 1;
if(x == 1 || x == 0) return x-1;
if(x < 0)
return x&1 ? x+1 : 1-x ;
else
return x&1 ? x-1 : -1-x ;
}
no subject
Date: 2016-11-13 10:32 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-13 09:43 pm (UTC)-abs(x)
но может, это слишком просто и там есть ограничения на такое?
То есть, почему сомнения, это при чем тут int32? Ну есть одно число, которое не отминусуется. Так оно всегда есть.
no subject
Date: 2016-11-13 10:33 pm (UTC)(no subject)
From:(no subject)
From:Ура!
From:no subject
Date: 2016-11-14 12:21 am (UTC)-abs(x)
но может, это слишком просто и там есть ограничения на такое?
То есть, почему сомнения, это при чем тут int32? Ну есть одно число, которое не отминусуется. Так оно всегда есть.
no subject
Date: 2016-11-14 05:18 pm (UTC)0 --> 0
1 --> 2 --> -1 --> -2 --> 1
3 --> 4 --> -3 --> -4 --> 3
...
125 --> 126 --> -125 --> -126 --> 125
127, -127, 80h explodes the Earth
no subject
Date: 2016-11-14 11:35 pm (UTC)Но все равно такой функции не будет - будут две неподвижных точки (0 и LONG_MIN) если x = -x, то f(x) = x. а все остальное должно делится на четверки так как f(f(f(f(x)))) = x, а оно не делится.
no subject
Date: 2016-11-15 12:13 am (UTC)Идея, что 0-x определен не на всех x, конечно, свежа.
А дальше да, ответ правильный. :)
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2016-11-16 10:24 am (UTC)no subject
Date: 2016-11-17 05:15 pm (UTC)Re:
From:(no subject)
From:(no subject)
From:(no subject)
From: