Re[2]: f(f(x)) = -x
От: Roman Odaisky Украина  
Дата: 17.01.08 21:25
Оценка: 2 (1)
Здравствуйте, Панда, Вы писали:

П>Найти функцию f, для которой f(f(x)) — -x

П>x — любое вещественное число без ограничений.

Делов-то...

f(f(x)) = -x
f² = -1
f = i
f(x) = ix
До последнего не верил в пирамиду Лебедева.
Re[3]: f(f(x)) = -x
От: Панда Россия  
Дата: 17.01.08 21:28
Оценка:
D>Для пуристов: снимаю ограничение на 32 бита. Допустимы произвольные целые — BigInteger.

Давайте тогда уж BigFloat — произвольные дробные с бесконечной точностью. Решение, которое приводил deniok, должно работать и для них. Только на even надо проверять не x, а round(abs(x)).
Re[3]: f(f(x)) = -x
От: RomikT Германия  
Дата: 17.01.08 21:29
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

П>>Найти функцию f, для которой f(f(x)) — -x

П>>x — любое вещественное число без ограничений.

RO>Делов-то...


RO>f(f(x)) = -x

RO>f² = -1
RO>f = i
RO>f(x) = ix

А какое вещественное число обозначено таинственной буквой i?
Re[4]: f(f(x)) = -x
От: Панда Россия  
Дата: 17.01.08 21:32
Оценка:
Всееее, мозги заплелись! Не заметил, что deniok — это вы и есть :D
Re[4]: f(f(x)) = -x
От: Панда Россия  
Дата: 17.01.08 21:38
Оценка:
Здравствуйте, RomikT, Вы писали:
RT>А какое вещественное число обозначено таинственной буквой i?

С комплексными тоже прикольно. Но для вещественных тоже строится элементарно. Я уже просек фишку. Нам надо разбить все положительные вещественные числа на непересекающиеся пары. Это можно сделать сотнями способов.

После этого строим функцию:

f(0) = 0

Для любой пары (x1, x2)

f(x1) = x2
f(x2) = -x1
f(-x1) = -x2
f(-x2) = x1
Re[3]: f(f(x)) = -x
От: Аноним  
Дата: 18.01.08 00:08
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>Задача очевидно не имеет решения.


D>Для пуристов: снимаю ограничение на 32 бита. Допустимы произвольные целые — BigInteger.


Ну тогда решение простое: мы имеем 4 перестановки(тк уравнение 4 порядка), так что рассмотрим кольцо -2 -1 0 1 2.
0 преобразуется сам на себя, а из остальных чисел выбираем любой из 2 вариантов, например -2 -> 1, -1 -> -2, 1 -> 2, 2 -> -1.
Так что решение существует для любого множества кратного 4 + тривиальные числа, например 0.
Re: f(f(x)) = -x
От: vadimcher  
Дата: 18.01.08 02:53
Оценка:
Здравствуйте, deniok, Вы писали:

D>

D>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>целые числа. x — целочисленный аргумент (например, 32-битный).

D>от avva


int f(int x) {
    if (CDROM_opened()) { CDROM_close(); while(CDROM_opened()); return -x; }
    else { CDROM_open(); while(CDROM_closed()); return x; }
}

А вот зайца кому, зайца-выбегайца?!
Re[4]: f(f(x)) = -x
От: vadimcher  
Дата: 18.01.08 02:54
Оценка:
Здравствуйте, RomikT, Вы писали:

RT>Здравствуйте, Vintik_69, Вы писали:


V_>>Здравствуйте, RomikT, Вы писали:


RT>>>Наверняка не самое короткое решение, но вроде работать будет.


V_>>Не работает для 2147483647


RT>По моему, несложно доказать что среди чисел от -2147483648 до 2147483647 невозможно давать правильный результат для всех чисел.

RT>Как минимум, два числа окажутся неохваченными. Одно — просто потому, что нет числа +2147483648. А второе — ну так мир устроен


Как это для двух?

А вот зайца кому, зайца-выбегайца?!
Re[2]: f(f(x)) = -x
От: vadimcher  
Дата: 18.01.08 02:57
Оценка:
Здравствуйте, RomikT, Вы писали:

RT>Здравствуйте, deniok, Вы писали:


D>>

D>>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>>целые числа. x — целочисленный аргумент (например, 32-битный).


RT>Наверняка не самое короткое решение, но вроде работать будет.

RT>
RT>if (x==0) {
RT>  return 0;
RT>}
RT>if (x>0) {
RT>  if (x & 1 == 1) {
RT>    return x+1;
RT>  } else {
RT>    return -x+1;
RT>  }
RT>} else {
RT>  if (x & 1 == 1) {
RT>    return x-1;
RT>  } else {
RT>    return -x-1;
RT>  }
RT>}
RT>


Идея понятная. В случае переполнения для таких чисел как 0x7fffffff результат неверный: 0x7fffffff вместо 0x80000001.

А вот зайца кому, зайца-выбегайца?!
Re[2]: f(f(x)) = -x
От: Трурль  
Дата: 18.01.08 06:11
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>Так это невозможно. Отрицательных чисел больше, чем положительных.


А где-то в условии упоминается дополнительный код?
Re: f(f(x)) = -x
От: rg45 СССР  
Дата: 18.01.08 07:15
Оценка:
Здравствуйте, deniok, Вы писали:

D>

D>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>целые числа. x — целочисленный аргумент (например, 32-битный).

D>от avva

Ну, например:
f(x) = x при x < 0  
f(x) = -x при x >= 0
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: f(f(x)) = -x
От: rg45 СССР  
Дата: 18.01.08 07:18
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, deniok, Вы писали:


D>>

D>>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>>целые числа. x — целочисленный аргумент (например, 32-битный).

D>>от avva

R>Ну, например:

R>
R>f(x) = x при x < 0  
R>f(x) = -x при x >= 0
R>


На C/С++:
int f(int x)
{
  return x < 0 ? x : -x;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: f(f(x)) = -x
От: Курилка Россия http://kirya.narod.ru/
Дата: 18.01.08 07:20
Оценка: 1 (1)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, deniok, Вы писали:


D>>

D>>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>>целые числа. x — целочисленный аргумент (например, 32-битный).

D>>от avva

R>Ну, например:

R>
R>f(x) = x при x < 0  
R>f(x) = -x при x >= 0
R>


f(-1)=-1
f(f(-1))=-1 != -(-1)
Re[2]: f(f(x)) = -x
От: rg45 СССР  
Дата: 18.01.08 07:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, deniok, Вы писали:


D>>

D>>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>>целые числа. x — целочисленный аргумент (например, 32-битный).

D>>от avva

R>Ну, например:

R>
R>f(x) = x при x < 0  
R>f(x) = -x при x >= 0
R>


Да, написал ерунду
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: f(f(x)) = -x
От: Didro Россия home~pages
Дата: 18.01.08 07:24
Оценка: 1 (1)
Здравствуйте, rg45, Вы писали:

D>>>

D>>>Задача: написать функцию f(x), так, что f(f(x))= -x. Разрешено использовать только
D>>>целые числа. x — целочисленный аргумент (например, 32-битный).

D>>>от avva

R>>Ну, например:

R>>
R>>f(x) = x при x < 0  
R>>f(x) = -x при x >= 0
R>>

f(-1)= -1
f(f(-1))=f(-1)=-1.
лажа, однако.
Re[4]: f(f(x)) = -x
От: Didro Россия home~pages
Дата: 18.01.08 07:25
Оценка:
Здравствуйте, Didro, Вы писали:

D>f(-1)= -1

D>f(f(-1))=f(-1)=-1.
D>лажа, однако.

Пока писал, Курилка уже ответил, извиняюся.
Исправляю свою ошибку:
От: rg45 СССР  
Дата: 18.01.08 07:52
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, deniok, Вы писали:


D>>

D>>Задача: написать функцию f(x), так, что f(f(x)) = -x. Разрешено использовать только
D>>целые числа. x — целочисленный аргумент (например, 32-битный).

D>>от avva

R>Ну, например:

R>
R>f(x) = x при x < 0  
R>f(x) = -x при x >= 0
R>


int f(int x)
{
  return (x&1 ? -(x^1) : x^1) - 1;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re: Эх, опять неправильно
От: rg45 СССР  
Дата: 18.01.08 07:58
Оценка:
Что то я не в форме сегодня
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: f(f(x)) = -x
От: VsevolodC Россия  
Дата: 18.01.08 07:59
Оценка:
Здравствуйте, Панда, Вы писали:

П>На языках с динамической типизацией все просто


П>
П><?php
П>function f($x)
П>{
П>  if (is_array($x)) return $x[0];
П>  return array(-$x);
П>}
П>?>
П>


аналогичная идея для C++

struct othertype
{
    int val;
    int atr;
};

othertype f(int i)
{
    othertype r;
    r.val = i;
    return r;
}

int f(othertype o)
{
    return -o.val;
}
Re[2]: f(f(x)) = -x
От: ghost92  
Дата: 18.01.08 10:47
Оценка: 1 (1)
Здравствуйте, Панда, Вы писали:

П>Подумал. В целом — задача неразрешимая. Потому что есть такое 32-битное x, для которого невозможно записать 32 битами -x. Это число, у которого все биты 1.


П>Если это число выкинуть из допустимых аргументов — то придумал.

П>Продемонстрирую идею такой функции, если x может принимать значения от -3 до 3.
П>
П>int f(int x)
П>{
П>  int y[] = {0, 1, 2, 3, 0, -1, -2, -3};
П>  return y[(x+2)%8];
П>}
П>


f(f(2)) = f(0) = 2
упс.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.