LINUX.ORG.RU

XOR для float. Оригинальное решение

 


0

1

XOR. Казалось бы, элементарная вещь, в базисе +,-,* выражается как A+B-2*A*B. Оказывается, есть ещё одно решение, считающее XOR за те же 4 действия в базисе -,/:

#include <stdio.h>
#define OK puts("OK")

inline float xor_float(float A, float B) {return (B - A)/(B - 1e-8 - A);}

int main() {
	// Проверяем
	if (xor_float(0,0) == 0) OK;
	if (xor_float(0,1) == 1) OK;
	if (xor_float(1,0) == 1) OK;
	if (xor_float(1,1) == 0) OK;
	
	return 0;
}
★★★
Ответ на: комментарий от metar

Да никакого глубинного смысла, просто реализация забавная, я, когда это получил, сначала удивился.

Sadler ★★★
() автор топика
Ответ на: комментарий от buddhist

Рассматривайте код как данность, как учебную задачу, если хотите.

Sadler ★★★
() автор топика
Ответ на: комментарий от buddhist

А вы знаете, почему специалиста по численному анализу пугает формула [f(x+dx)-f(x)]/dx?

Вот, верное направление мысли =) Только у нас случай с ограниченной разрядной сеткой.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Перечитал ОП, понял вашу идею. Действительно забавно.

buddhist ★★★★★
()

Оказывается, есть ещё одно решение, считающее XOR за те же 4 действия в базисе -,/

Только в твоей влажной реальности с плавающей точкой. Математически это неверно.

red_eyed_peguin
()

эта, а оно будет работать на нецелых числах?

true_admin ★★★★★
()

я хоть убейте не понимаю, что значит XOR для нецелочисленных данных. Вы хотите заксорить битовое представление флоатов что ли? Так и пишите. Математического смысла XOR вещественных чисел не имеет.

JFreeM ★★★☆
()
Ответ на: комментарий от buddhist

Все равно не понял, при чем тут производная. В смысле, что в нее не входит о(х) или что?

cdshines ★★★★★
()

XOR. Казалось бы, элементарная вещь, в базисе +,-,* выражается как A+B-2*A*B.

Теперь смело можно переходить к дивергенции потока сознания.

pathfinder ★★★★
()

А ничего, что деление гораздо более медленная операция чем +-*?

Сакрального смысла XOR для флотов я тоже не понял.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Т.е. фраза

Рассматривайте код как данность, как учебную задачу, если хотите.

Вас не насторожила?

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Вас не насторожила?

Даже и не знаю что сказать... я обычно даю учебные задачи во первых близкие к жизни, во вторых при решении таки делаю акцент на актуальную оптимизацию.

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.