Троичные вычисления на языке программирования Golang

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичные вычисления на языке программирования Golang

Post by askfind »

Проект trigo

Trinary logic in Go language.

Ссылка: https://github.com/kpmy/trigo

Code: Select all

/* троичная логика */
var TRUE Trit = Trit{N: false, T: true}
var FALSE Trit = Trit{N: false, T: false}
var NIL Trit = Trit{N: true, T: false}

type Trit struct {
	N bool
	T bool
}
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичные вычисления на языке программирования Golang

Post by askfind »

https://github.com/askfind/goTernaryArithmetic.git

- Реализованы логические операции с TRIT-1 (тритами)
- Добавлен тип данных TRITS-32 (слово из тритов)
- Выполнена оптимизация скорости выполнения операций

Code: Select all

// Таб.1 Алфавит троичной симметричной системы счисления
// +--------------------------+-------+-------+-------+
// | Числа                    |  -1   |   0   |   1   |
// +--------------------------+-------+-------+-------+
// | Логика                   | false |  nil  | true  |
// +--------------------------+-------+-------+-------+
// | Логика                   |   f   |   n   |   t   |
// +--------------------------+-------+-------+-------+
// | Символы                  |   -   |	  0   |	  +   |
// +--------------------------+-------+-------+-------+
// | Символы                  |   N   |	  Z   |	  P   |
// +--------------------------+-------+-------+-------+
// | Символы                  |   N   |	  O   |	  P   |
// +--------------------------+-------+-------+-------+
// | Символы                  |   0   |	  i   |	  1   |
// +--------------------------+-------+-------+-------+
// | Символы                  |   v   |	  0   |	  ^   |
// +--------------------------+-------+-------+-------+
Benchmark Test

```sh
go test -bench=.
```
goos: linux
goarch: amd64

Benchmark
pow 343.8 ns/op
shift_ts 0.374 ns/op
add_half_slowly_t 4.17 ns/op
add_full_t 11.5 ns/op
mul_t 7.95 ns/op
sum_t 5.32 ns/op
get_trit 0.391 ns/op
sgn_trs 67.7 ns/op
shift_trs 0.752 ns/op
add_trs 480 ns/op
sub_trs 486 ns/op
int2trs 0.392 ns/op
trs2int 0.389 ns/op
PASS
ok _
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичные вычисления на языке программирования Golang

Post by Lavr »

Извините за оффтоп... :oops: очень понравилась Ваша новая аватарка со смыслом! :lol:

Image
iLavr
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичные вычисления на языке программирования Golang

Post by askfind »

Lavr wrote:Извините за оффтоп... :oops: очень понравилась Ваша новая аватарка со смыслом! :lol:

Image
В антикварном магазине искал монету 3 копейки 1958 года выпуска. Мне хотелось купить.

В год запуска первого образца троичного "Сетунь" монетные заводы выпустили ограниченным тиражом партию монет.

На рынке цена за редкую монету 3 копейки 1958 года может достигать 100 000 руб.

Сейчас на такие деньги можно купить российский компьютер "Эльбрус". :rotate:
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичные вычисления на языке программирования Golang

Post by Lavr »

askfind wrote:На рынке цена за редкую монету 3 копейки 1958 года может достигать 100 000 руб.
Я в курсе, поэтому и написал Вам то, что выше написал... :wink:

Ну и Вам теперь не надо писать фразу типа:"Добавлю и я свои 3 копейки..." :ebiggrin:
iLavr
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичные вычисления на языке программирования Golang

Post by askfind »

Обсуждение "Реализация троичных чисел в двоичной памяти и операции ARM"

На 1 трит необходимо 2 бита.

Биты <-> Триты
32 бита - это 16 трит.
64 бита - это 32 трита.

ARM, RISC-V
binaryRAM32[2] <-> tritRAM32[1] - троичное число 32 трита
binaryRAM64[2] <-> tritRAM64[1] - троичное число 64 трита

tritRAM64[1]
uint8_t l; /* длина троичного числа в тритах */
uint64_t t1; /* троичное число FALSE,TRUE */
uint64_t t0; /* троичное число NIL */

// Таб.1 Алфавит троичной симметричной системы счисления
// +--------------------------+-------+-------+-------+
// | Числа | -1 | 0 | 1 |
// +--------------------------+-------+-------+-------+

Преобразование int -> trit
trit= -1 -> {t1=0, t0=1}
trit= +1 -> {t1=1, t0=1}
trit= 01 -> {t1=1 or t1=0 , t0=0}

Примечание:
- Троичное число (поле тритов):
trs32 = t31...t0
- Троичное число в бинарной памяти
addr1 binary32 = b31...b0 ( t1 ) / две ячейки памяти
addr0 binary32 = b31...b0 ( t0 ) \

===========================================
Троичное число +T[32].

1) Как получить +T[32] -> -T[32] ?

Троичное число в бинарной памяти
+T[32]
addr1 b31...b0 ( t1 ) / две ячейки памяти
addr0 b31...b0 ( t0 ) \

-T[32]
addr1 NOT( b31...b0 ) ( NOT(t1) ) / две ячейки памяти
addr0 b31...b0 ( t0 ) \

Итого: Одна операция NOT ARM, RISC-V!

2) Как получить сдвиг вправо/влево T[32] shift(N) ?

Троичное число в бинарной памяти
T[32]
addr1 b31...b0 ( t1 ) / две ячейки памяти
addr0 b31...b0 ( t0 ) \

b31...b0 » N ( t1 ) » N
b31...b0 » N ( t0 ) » N

Итого: Две операции ARM
LSR addr1,#N Логический сдвиг вправо
LSR addr0,#N Логический сдвиг вправо

Домашнее задание для участников!

Как реализовать троичные операции на процессоре ARM?

- троичное умножение: ternary1 AND ternary2
- троичное сложение: ternary1 OR ternary2
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичные вычисления на языке программирования Golang

Post by askfind »

goTernaryArithmetic на языках Golang, С


Новости

1. Библиотека троичной арифметики, библиотека тритов и троичных чисел для реализации эмуляторов троичных процессоров или вычислителей.

2. Добавлены файлы на языке С, которые вызываются из языка Golang. Цель - высокая производительность операций над тритами и троичными числами.

3. Кросс-платформенная компиляция для запуска приложения на разных операционных системах с архитектурами x86_32, x86_64, ARM, MIPS. RISC-V.

4. Тестирование функций. Измерение производительности.

Дерево файлов проекта:

$ tree -L 1
.
├── go.mod
├── goTernaryArithmetic.go
├── goTernaryArithmetic_test.go
├── gpl-3.0.md
├── LICENSE.txt
├── README.md
├── trslib.c
└── trslib.h

0 directories, 8 files

ТЕСТ

$ go run goTernaryArithmetic.go

# command-line-arguments
cgo-gcc-prolog:47:33: warning: unused variable '_cgo_a' [-Wunused-variable]
Test call function trslib -----------
-------------------------------
Hello from inline C
0.5168780223752157
{[49 50 51 52 53 54 55 56] [57 48]}
{[48 57 56 55 54 53 52 51 50 49]}
-------------------------------
Test ternary functions -----------
- calculate trit-1 --------------
Set trit:
P
N
M
N
false
true
- add_full_t --------------
{1 1} {0 1}
- calculate trits-32 --------------
--- Operation Setun-1958 ---
--------------------------------


Ссылка на проект: https://github.com/askfind/goTernaryArithmetic.git
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)