next-markdown
This commit is contained in:
BIN
app/src/assets/Система счисления 8.png
Normal file
BIN
app/src/assets/Система счисления 8.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
@@ -1,6 +1,6 @@
|
|||||||
import flet as ft
|
import flet as ft
|
||||||
import designer as ds
|
import designer as ds
|
||||||
from pages.tabs import start1,calculater2, binary_data3, binary_calculeator4, octogon_data5, octogon_calculeator6, sedecim_data7
|
from pages.tabs import start1,calculater2, binary_data3, binary_calculeator4, octogon_data5, octogon_calculeator6, sedecim_data7,sedecim_calculeator8, pentecostal_system9
|
||||||
|
|
||||||
class Main_page(ft.View):
|
class Main_page(ft.View):
|
||||||
def __init__(self, page):
|
def __init__(self, page):
|
||||||
@@ -23,6 +23,8 @@ class Main_page(ft.View):
|
|||||||
octogon_data5.Button_text_data(),
|
octogon_data5.Button_text_data(),
|
||||||
octogon_calculeator6.Button_octogon_calculator(),
|
octogon_calculeator6.Button_octogon_calculator(),
|
||||||
sedecim_data7.Button_sedecim_data(),
|
sedecim_data7.Button_sedecim_data(),
|
||||||
|
sedecim_calculeator8.Button_sedecim_calculator(),
|
||||||
|
pentecostal_system9.Button_binary_data(),
|
||||||
ft.Container(
|
ft.Container(
|
||||||
bgcolor="#280A3F",
|
bgcolor="#280A3F",
|
||||||
expand=True,
|
expand=True,
|
||||||
|
|||||||
@@ -13,75 +13,136 @@ class Button_binary_data(ft.CupertinoButton):
|
|||||||
|
|
||||||
def test_data(e, self):
|
def test_data(e, self):
|
||||||
md1="""
|
md1="""
|
||||||
Двоичная система счисления — это система, в которой используются только две цифры: 0 и 1.
|
**N-мерные системы счисления**
|
||||||
Двои́чная систе́ма счисле́ния — позиционная система счисления с основанием 2. Благодаря непосредственной реализации в цифровых электронных схемах на логических вентилях, двоичная система используется практически во всех современных компьютерах и прочих вычислительных электронных устройствах.
|
|
||||||
|
|
||||||
Компьютеры хранят отрицательные числа иначе, чем положительные, из-за особенностей двоичной системы и конструкции процессоров. Вот основные способы:
|
**Расширение позиционных систем в многомерное пространство**
|
||||||
|
|
||||||
1. Прямой код (очень редко используется)
|
Основная концепция:
|
||||||
|
Вместо линейной цепочки разрядов используется n-мерная решётка, где каждая ячейка имеет свои координаты и вес.
|
||||||
|
|
||||||
Старший бит (самый левый) делает число отрицательным:
|
**Математическое представление:**
|
||||||
Например, для 8 бит:
|
|
||||||
00010101 — это +21
|
|
||||||
10010101 — это -21
|
|
||||||
Недостатки: две разные записи нуля (положительный и отрицательный), сложнее реализовать арифметику.
|
|
||||||
|
|
||||||
2. Обратный код (редко используется)
|
Для 2D системы счисления:
|
||||||
|
N = ΣΣ a_ij × b₁ⁱ × b₂ʲ
|
||||||
|
|
||||||
Если число отрицательное, инвертируются все биты, кроме знакового:
|
Для 3D системы счисления:
|
||||||
+21: 00010101
|
N = ΣΣΣ a_ijk × b₁ⁱ × b₂ʲ × b₃ᵏ
|
||||||
-21: 11101010
|
|
||||||
Недостатки: две записи нуля, сложная арифметика.
|
|
||||||
|
|
||||||
3. Дополнительный код (почти всегда используется)
|
Общая формула для n-мерной системы:
|
||||||
|
N = Σ...Σ a_i₁...iₙ × b₁ⁱ¹ × b₂ⁱ² × ... × bₙⁱⁿ
|
||||||
|
|
||||||
Для отрицательного числа инвертируются все биты и прибавляется единица:
|
где:
|
||||||
+21: 00010101
|
- a_i₁...iₙ - цифра в позиции (i₁,...,iₙ)
|
||||||
-21: инвертируем: 11101010, прибавляем 1: 11101011
|
- b₁,...,bₙ - основания по каждому измерению
|
||||||
Преимущества: только одна запись нуля, простая арифметика (сложение и вычитание одинаковы для положительных и отрицательных чисел).
|
- i₁,...,iₙ - координаты в n-мерном пространстве
|
||||||
|
|
||||||
Почему люди пишут числа как "-10101"
|
**Пример 2D системы:**
|
||||||
|
|
||||||
Запись -10101 — это просто привычный способ обозначения отрицательных чисел в десятичной или любой другой системе счисления.
|
Основания: b₁ = 10 (по горизонтали), b₂ = 8 (по вертикали)
|
||||||
В памяти компьютера знак не хранится отдельно, а закодирован в битах (обычно старший бит — знаковый).
|
|
||||||
Для человека запись с минусом интуитивно понятна, для компьютера — это набор битов, интерпретируемый по правилам (обычно дополнительного кода).
|
|
||||||
|
|
||||||
Другие тонкости
|
Числовая матрица:
|
||||||
|
[3 5]
|
||||||
|
[2 7]
|
||||||
|
|
||||||
Знаковый и беззнаковый типы:
|
Расчёт:
|
||||||
Например, в языке C/C++ есть int (знаковый) и unsigned int (беззнаковый).
|
N = 3×10¹×8¹ + 5×10¹×8⁰ + 2×10⁰×8¹ + 7×10⁰×8⁰
|
||||||
Переполнение:
|
N = 3×80 + 5×10 + 2×8 + 7×1
|
||||||
Если сумма двух больших положительных чисел выходит за пределы диапазона типа, возникает переполнение.
|
N = 240 + 50 + 16 + 7 = 313
|
||||||
Диапазон значений:
|
|
||||||
В 8 битах:
|
|
||||||
беззнаковый: 0..255
|
|
||||||
знаковый (доп. код): -128..127
|
|
||||||
|
|
||||||
Пример (8 бит, дополнительный код)
|
**Преимущества n-мерных систем:**
|
||||||
|
|
||||||
+5: 00000101
|
• Компактное представление многомерных данных
|
||||||
-5: инвертируем: 11111010, прибавляем 1: 11111011
|
• Естественное отображение для изображений, матриц, тензоров
|
||||||
Сложение: 00000101 + 11111011 = 00000000 (0), перенос игнорируется
|
• Эффективные алгоритмы для многомерных преобразований Фурье
|
||||||
|
• Прямое соответствие структурам данных в машинном обучении
|
||||||
|
• Упрощённая работа с пространственными данными
|
||||||
|
|
||||||
Мантиса, запятая и хранение дробных чисел
|
**Применения:**
|
||||||
|
|
||||||
Мантиса — это дробная часть числа в позиционной системе. В двоичной мантиса хранится как последовательность битов, где k-й бит дробной части соответствует весу 2^{-k}.
|
• Обработка изображений (2D системы)
|
||||||
|
• Научные вычисления с тензорами (3D+ системы)
|
||||||
|
• Сжатие многомерных данных
|
||||||
|
• Нейронные сети и глубокое обучение
|
||||||
|
• Квантовые вычисления (многомерные представления)
|
||||||
|
|
||||||
Запятая (разделитель) в человеческом вводе обозначает границу между целой частью и мантиссой. Пример: 101,101₂ = 1*2^2 + 0*2^1 + 1*2^0 + 1*2^{-1} + 0*2^{-2} + 1*2^{-3} = 5.625.
|
**Особенности:**
|
||||||
|
|
||||||
В реальной памяти компьютера точка (запятая) обычно не хранится как символ. Существует два распространённых способа хранения дробных чисел:
|
Каждое измерение может иметь своё основание, что позволяет оптимально кодировать различные типы данных в многомерных структурах.
|
||||||
- Fixed-point (fixed Q-format): число хранится как целое, представляющее значение scaled = round(x * 2^{f}), где f — количество бит дробной части. Таким образом все числа интерпретируются как scaled/2^{f}.
|
|
||||||
- Floating-point (IEEE-754): хранится знак, экспонента и мантисса; формат сложнее, даёт большой диапазон и нормализацию.
|
|
||||||
|
|
||||||
В этом калькуляторе дроби вводятся через запятую и обрабатываются как обычные дробные значения (float) с фиксированной точностью при выводе (frac_precision бит).
|
|
||||||
|
|
||||||
Практические рекомендации
|
|
||||||
|
|
||||||
- Если хотите работать с отрицательными целыми в двоичной системе — вводите строку ровно N бит (например, 16). Старший бит будет определять знак.
|
|
||||||
- Для дробных значений используйте запятую и при необходимости ставьте знак '-' перед всем числом: -101,01.
|
|
||||||
- Помните про переполнение: при выводе целого результата в двоичной системе он должен помещаться в выбранную разрядность.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
md2="""
|
||||||
|
**Сборка 60-мерной системы счисления**
|
||||||
|
|
||||||
|
**1. Определение структуры:**
|
||||||
|
- 60 независимых измерений (осей)
|
||||||
|
- Каждое измерение имеет своё основание b₁, b₂, ..., b₆₀
|
||||||
|
- Пример оснований: [2, 3, 5, 7, 11, ..., 293] (простые числа)
|
||||||
|
|
||||||
|
**2. Математическая модель:**
|
||||||
|
N = ΣΣ...Σ a_i₁i₂...i₆₀ × b₁ⁱ¹ × b₂ⁱ² × ... × b₆₀ⁱ⁶⁰
|
||||||
|
|
||||||
|
где:
|
||||||
|
- a_i₁i₂...i₆₀ - цифра в 60-мерной позиции
|
||||||
|
- i₁,...,i₆₀ - координаты от 0 до k (зависит от основания)
|
||||||
|
- b₁,...,b₆₀ - основания каждого измерения
|
||||||
|
|
||||||
|
**3. Практическая реализация:**
|
||||||
|
|
||||||
|
**Шаг 1: Выбор оснований**
|
||||||
|
b₁ = 2 (измерение 1)
|
||||||
|
b₂ = 3 (измерение 2)
|
||||||
|
b₃ = 5 (измерение 3)
|
||||||
|
...
|
||||||
|
b₆₀ = 293 (измерение 60)
|
||||||
|
|
||||||
|
**Шаг 2: Представление числа**
|
||||||
|
Каждое число - это 60-мерный массив:
|
||||||
|
[координата_1][координата_2]...[координата_60]
|
||||||
|
|
||||||
|
**Шаг 3: Пример вычисления**
|
||||||
|
Для упрощения возьмём маленькие координаты:
|
||||||
|
|
||||||
|
a₁ = 1, a₂ = 0, a₃ = 2, ..., a₆₀ = 1
|
||||||
|
|
||||||
|
N = 1×2¹ + 0×3¹ + 2×5¹ + ... + 1×293¹
|
||||||
|
|
||||||
|
**4. Алгоритм перевода в десятичную:**
|
||||||
|
|
||||||
|
```
|
||||||
|
десятичное_число = 0
|
||||||
|
для каждого измерения i от 1 до 60:
|
||||||
|
вес = произведение оснований всех предыдущих измерений
|
||||||
|
десятичное_число += цифра[i] × вес
|
||||||
|
```
|
||||||
|
|
||||||
|
**5. Особенности 60-мерной системы:**
|
||||||
|
|
||||||
|
- **Гиперпространство данных**: Каждая точка в 60-мерном пространстве - уникальное число
|
||||||
|
- **Гибкость**: Можно использовать разные основания для разных типов данных
|
||||||
|
- **Сжатие**: Эффективное кодирование сложных структур
|
||||||
|
- **Вычисления**: Сложение и умножение происходят независимо по каждому измерению
|
||||||
|
|
||||||
|
**6. Области применения:**
|
||||||
|
|
||||||
|
- Квантовые вычисления (60 кубитов)
|
||||||
|
- Глубокое обучение (нейросети с 60 слоями)
|
||||||
|
- Криптография (сверхбольшие пространства ключей)
|
||||||
|
- Научное моделирование (многопараметрические системы)
|
||||||
|
|
||||||
|
**7. Ограничения:**
|
||||||
|
|
||||||
|
- Визуализация невозможна (человек не может представить 60 измерений)
|
||||||
|
- Вычисления требуют суперкомпьютеров
|
||||||
|
- Сложность отладки и верификации
|
||||||
|
|
||||||
|
**Простой пример для 3 измерений вместо 60:**
|
||||||
|
Основания: [2, 3, 5]
|
||||||
|
Число: [1, 0, 2]
|
||||||
|
N = 1×(3×5) + 0×(5) + 2×1 = 15 + 0 + 2 = 17
|
||||||
|
|
||||||
|
В 60-мерном случае принцип тот же, но измерений в 20 раз больше.
|
||||||
|
"""
|
||||||
|
|
||||||
right_column.controls=[ ft.Container(
|
right_column.controls=[ ft.Container(
|
||||||
bgcolor="#55257D",
|
bgcolor="#55257D",
|
||||||
padding=ft.padding.all(10),
|
padding=ft.padding.all(10),
|
||||||
@@ -92,14 +153,20 @@ class Button_binary_data(ft.CupertinoButton):
|
|||||||
expand=True,
|
expand=True,
|
||||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||||
controls=[
|
controls=[
|
||||||
ft.Text(md1, size=16, color="white"),
|
ft.Row(
|
||||||
ft.Text("Перевод из десятичной системы в двоичную:", size=16, color="white"),
|
expand=True,
|
||||||
ft.Container(
|
controls=[
|
||||||
bgcolor="#000000",
|
ft.Markdown(md1, expand=True),
|
||||||
content=ft.Image(src="./Система счисления 1.jpg", expand=True),
|
|
||||||
border_radius=10,
|
],
|
||||||
width=350,
|
|
||||||
height=300,
|
),
|
||||||
|
ft.Row(
|
||||||
|
expand=True,
|
||||||
|
controls=[
|
||||||
|
ft.Markdown(md2, expand=True),
|
||||||
|
],
|
||||||
|
|
||||||
),
|
),
|
||||||
ft.Text("Перевод обратно в десятичную систему:", size=16, color="white"),
|
ft.Text("Перевод обратно в десятичную систему:", size=16, color="white"),
|
||||||
ft.Container(
|
ft.Container(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from designer import right_column
|
from designer import right_column
|
||||||
import flet as ft
|
import flet as ft
|
||||||
|
|
||||||
class Button_binary_calculator(ft.CupertinoButton):
|
class Button_sedecim_calculator(ft.CupertinoButton):
|
||||||
def __init__(self, text: str = "Двоичный калькулятор"):
|
def __init__(self, text: str = "Двоичный калькулятор"):
|
||||||
self.result_left = ft.Text(value="0", size=30, width=300)
|
self.result_left = ft.Text(value="0", size=30, width=300)
|
||||||
self.result_right = ft.Text(value="0", size=30, width=300)
|
self.result_right = ft.Text(value="0", size=30, width=300)
|
||||||
|
|||||||
Reference in New Issue
Block a user