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 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):
|
||||
def __init__(self, page):
|
||||
@@ -23,6 +23,8 @@ class Main_page(ft.View):
|
||||
octogon_data5.Button_text_data(),
|
||||
octogon_calculeator6.Button_octogon_calculator(),
|
||||
sedecim_data7.Button_sedecim_data(),
|
||||
sedecim_calculeator8.Button_sedecim_calculator(),
|
||||
pentecostal_system9.Button_binary_data(),
|
||||
ft.Container(
|
||||
bgcolor="#280A3F",
|
||||
expand=True,
|
||||
|
||||
@@ -13,73 +13,134 @@ class Button_binary_data(ft.CupertinoButton):
|
||||
|
||||
def test_data(e, self):
|
||||
md1="""
|
||||
Двоичная система счисления — это система, в которой используются только две цифры: 0 и 1.
|
||||
Двои́чная систе́ма счисле́ния — позиционная система счисления с основанием 2. Благодаря непосредственной реализации в цифровых электронных схемах на логических вентилях, двоичная система используется практически во всех современных компьютерах и прочих вычислительных электронных устройствах.
|
||||
**N-мерные системы счисления**
|
||||
|
||||
Компьютеры хранят отрицательные числа иначе, чем положительные, из-за особенностей двоичной системы и конструкции процессоров. Вот основные способы:
|
||||
**Расширение позиционных систем в многомерное пространство**
|
||||
|
||||
1. Прямой код (очень редко используется)
|
||||
Основная концепция:
|
||||
Вместо линейной цепочки разрядов используется n-мерная решётка, где каждая ячейка имеет свои координаты и вес.
|
||||
|
||||
Старший бит (самый левый) делает число отрицательным:
|
||||
Например, для 8 бит:
|
||||
00010101 — это +21
|
||||
10010101 — это -21
|
||||
Недостатки: две разные записи нуля (положительный и отрицательный), сложнее реализовать арифметику.
|
||||
**Математическое представление:**
|
||||
|
||||
2. Обратный код (редко используется)
|
||||
Для 2D системы счисления:
|
||||
N = ΣΣ a_ij × b₁ⁱ × b₂ʲ
|
||||
|
||||
Если число отрицательное, инвертируются все биты, кроме знакового:
|
||||
+21: 00010101
|
||||
-21: 11101010
|
||||
Недостатки: две записи нуля, сложная арифметика.
|
||||
Для 3D системы счисления:
|
||||
N = ΣΣΣ a_ijk × b₁ⁱ × b₂ʲ × b₃ᵏ
|
||||
|
||||
3. Дополнительный код (почти всегда используется)
|
||||
Общая формула для n-мерной системы:
|
||||
N = Σ...Σ a_i₁...iₙ × b₁ⁱ¹ × b₂ⁱ² × ... × bₙⁱⁿ
|
||||
|
||||
Для отрицательного числа инвертируются все биты и прибавляется единица:
|
||||
+21: 00010101
|
||||
-21: инвертируем: 11101010, прибавляем 1: 11101011
|
||||
Преимущества: только одна запись нуля, простая арифметика (сложение и вычитание одинаковы для положительных и отрицательных чисел).
|
||||
где:
|
||||
- a_i₁...iₙ - цифра в позиции (i₁,...,iₙ)
|
||||
- b₁,...,bₙ - основания по каждому измерению
|
||||
- i₁,...,iₙ - координаты в n-мерном пространстве
|
||||
|
||||
Почему люди пишут числа как "-10101"
|
||||
**Пример 2D системы:**
|
||||
|
||||
Запись -10101 — это просто привычный способ обозначения отрицательных чисел в десятичной или любой другой системе счисления.
|
||||
В памяти компьютера знак не хранится отдельно, а закодирован в битах (обычно старший бит — знаковый).
|
||||
Для человека запись с минусом интуитивно понятна, для компьютера — это набор битов, интерпретируемый по правилам (обычно дополнительного кода).
|
||||
Основания: b₁ = 10 (по горизонтали), b₂ = 8 (по вертикали)
|
||||
|
||||
Другие тонкости
|
||||
Числовая матрица:
|
||||
[3 5]
|
||||
[2 7]
|
||||
|
||||
Знаковый и беззнаковый типы:
|
||||
Например, в языке C/C++ есть int (знаковый) и unsigned int (беззнаковый).
|
||||
Переполнение:
|
||||
Если сумма двух больших положительных чисел выходит за пределы диапазона типа, возникает переполнение.
|
||||
Диапазон значений:
|
||||
В 8 битах:
|
||||
беззнаковый: 0..255
|
||||
знаковый (доп. код): -128..127
|
||||
Расчёт:
|
||||
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 бит, дополнительный код)
|
||||
**Преимущества 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 бит).
|
||||
md2="""
|
||||
**Сборка 60-мерной системы счисления**
|
||||
|
||||
Практические рекомендации
|
||||
**1. Определение структуры:**
|
||||
- 60 независимых измерений (осей)
|
||||
- Каждое измерение имеет своё основание b₁, b₂, ..., b₆₀
|
||||
- Пример оснований: [2, 3, 5, 7, 11, ..., 293] (простые числа)
|
||||
|
||||
- Если хотите работать с отрицательными целыми в двоичной системе — вводите строку ровно N бит (например, 16). Старший бит будет определять знак.
|
||||
- Для дробных значений используйте запятую и при необходимости ставьте знак '-' перед всем числом: -101,01.
|
||||
- Помните про переполнение: при выводе целого результата в двоичной системе он должен помещаться в выбранную разрядность.
|
||||
**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(
|
||||
@@ -92,14 +153,20 @@ class Button_binary_data(ft.CupertinoButton):
|
||||
expand=True,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
controls=[
|
||||
ft.Text(md1, size=16, color="white"),
|
||||
ft.Text("Перевод из десятичной системы в двоичную:", size=16, color="white"),
|
||||
ft.Container(
|
||||
bgcolor="#000000",
|
||||
content=ft.Image(src="./Система счисления 1.jpg", expand=True),
|
||||
border_radius=10,
|
||||
width=350,
|
||||
height=300,
|
||||
ft.Row(
|
||||
expand=True,
|
||||
controls=[
|
||||
ft.Markdown(md1, expand=True),
|
||||
|
||||
],
|
||||
|
||||
),
|
||||
ft.Row(
|
||||
expand=True,
|
||||
controls=[
|
||||
ft.Markdown(md2, expand=True),
|
||||
],
|
||||
|
||||
),
|
||||
ft.Text("Перевод обратно в десятичную систему:", size=16, color="white"),
|
||||
ft.Container(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from designer import right_column
|
||||
import flet as ft
|
||||
|
||||
class Button_binary_calculator(ft.CupertinoButton):
|
||||
class Button_sedecim_calculator(ft.CupertinoButton):
|
||||
def __init__(self, text: str = "Двоичный калькулятор"):
|
||||
self.result_left = 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