Возьмем N чисел: A,B,C… В моем эксперименте я ограничился тремя числами. К каждому числу мы можем применить унарную функцию: SIN, COS, EXP, LN (я ограничился четыремя). Это дает 4*3=12 новых чисел, что вместе с изначальными дает 15 чисел. Далее применим к их комбинации бинарные операции +, -, *, /. (можно также рассмотреть и другие, например, возведение в степень, но я опять таки ограничился четыремя). Здесь новых комбинаций 15*15*4 (на самом деле меньше, так как некоторые операции запрещены, типа деления на 0, а для + и * количество комбинаций меньше изза их симметричности).
Далее мы можем повторять эти шаги еще и еще. Уже на втором шаге 34’513’800 формул (теперь вы понимаете, почему я ограничил число операций?) которые дали мне для A=1, B=2, C=3 целых 2’776’355 разных чисел.
График выше показывает концентрацию (количество разных чисел) для поддиапазонов длины 1 от -60 до +60. Шкала Y логарифмическая. Видна концентрация чисел около 0.
Делаем zoom для диапазона -2..2:
Тут шкала Y уже обычная. Пики около 0 и 1.
Делаем максимальный zoom, чтобы увидеть «тонкую структуру» распределения чисел:
Интересно, с какой точностью мы можем выразить произвольное число, скажем, 1.23456789? Это определяется (половиной) максимальной длины отрезка между двумя соседними точками (если нам не повезет). Ниже эти рассчеты показаны в виде графика, и дальше от ноля точность приближения падает:
Таким образом, как правило, мы можем выразить любое число с точностью от E-6 до E-5. Например, число 1.23456789 оказывается расположенным между
cos(ln(3)/cos(3))+sin(1/ln(3)) = 1.23456481266341 (0.0002%)
ln(exp(1)*sin(2))+exp(ln(3)/cos(3)) = 1.23456894186555 (0.000085%)
Наконец интересно, что будет, если вместо A=1, B=2,C=3 взять другие числа, например, A=sqrt(2), B=e, C=pi. Сравнение плотности чисел в первом (123) и втором (2epi) вы видите на картинке:
Как видно, по большому счету, разницы нет никакой. В завершении я хочу рассказать, при чем тут MS SQL. Задача переборная, и просто напрашивается решение с cross join, которые реализуют декартовы произведения всех имеющихся чисел для бинарных операций. Небольшой фрагмент кода вы можете увидеть в конце.
Полный код не публикуется, потому что я хочу его доработать для автоматической генерации текстов теории заговора на основе нумерологии.
-- step 3 insert into Formula (step,path,Value) select 3,path+' '+op, case when op='COS' then COS(Value) when op='SIN' then SIN(Value) when op='EXP' then case when Value<100 then EXP(Value) else NULL end when Value<=0 then NULL when op='LN' then LOG(Value) end from Formula, Unary -- step 4 select L.path+' '+R.path+' '+'+' as path,L.value+R.value as value into p1 from Formula L, Formula R where L.n<=R.n select L.path+' '+R.path+' '+'+' as path,L.value+R.value as value into p2 from Formula L, Formula R where L.n<=R.n select L.path+' '+R.path+' '+'+' as path,L.value+R.value as value into p3 from Formula L, Formula R select L.path+' '+R.path+' '+'+' as path,L.value+R.value as value into p4 from Formula L, Formula R where R.value<>0
Источник