nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 Nov 2020 22:27



Reply to topic  [ 11 posts ] 
Троичная плавающая точка 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18966
Location: Silicon Valley
Reply with quote
У нас 2 варианта предлагалось в январе 2008 - первый (использован в тунгуске):

Shaos wrote:
Idea about representation of floating point numbers: Lets take "truble" and divide it to 2 parts: 6-trit exponent and 18-trit fraction. By accuracy it is better than 32-bit "float", worse than 64-bit "double" and similar to 36-bit floating number in IBM System/360 from 1964 that had 9-bit sign and exponent and 27-bit fraction. Because of nature of balanced ternary numeric system we don't need "biasing" exponent. Also we don't need separate sign bit - we simply combine it with "hidden" most significant bit of fraction instead and it will be part of full 18-trit fraction. So range of exponent is from -364 to +364 (3^6/2) and fraction from -193710244 to +193710244 (3^18/2 that is max possible integer represented by this floating point format). To simplify formula for calculation number from representation we may simply forget about "fractional" nature of fraction and say F*3^E
8-)
P.S. here ^ means "power"

и второй:

Shaos wrote:
Right now I think that ability to compare normalized floating point numbers as integers is good and to have it we should do "fraction" really fractional (-1 < F < 1): (F*3^18)*3^E = F*3^(18+E). In this case for example to do float from integer 193710244 (PPPPPPPPPPPPPPPPPP) we have to add exponent +18 (OOPNOO): OOPNOOPPPPPPPPPPPPPPPPPP (here fraction is O.PPPPPPPPPPPPPPPPPP). Also to represent 0.5 we will use OOOOOOPPPPPPPPPPPPPPPPPP (error is 0.00000000258).

P.S. But in case of integer "fraction" described in my previous post we still can use normalization as shifting to the left and comparison "normalized" floating point numbers as regular integers...

Shaos wrote:
I forgot one important feature of balanced ternary numeric system - fractional number may have not zero in integer part of balanced ternary representation! For example P.N is 0.666...

Последний вариант более походит на обычную двоичную плавающую точку (но без отдельного бита под знак и без необходимости сдвигать порядок exponent) и на днях я понял как можно разрешить проблему что дробная часть может вылезти за точку в троичном представлении (как показано выше P.N = 0.666...) - нам надо выдерживать не -1 < F < +1 (F это мантисса - mantissa или significand или fraction) при нормализации, а -0.5 < F < +0.5 т.к. .PPPPPPPPPPPPPPPPPP это +0.5, а .NNNNNNNNNNNNNNNNNN это -0.5. Соответственно OOOOOOPPPPPPPPPPPPPPPPPP всё также будет означать 0.5, однако если прибавить сюда .OOOOOOOOOOOOOOOOOP нам придётся сдвинуть мантиссу для нормализации, хоть она всё ещё будет оставаться меньше 1 (но уже больше 0.5).

Можно специальные числа добавить:
положительная бесконечность - все триты порядка равны P, а старший трит мантиссы равен P;
отрицательная бесконечность - все триты порядка равны P, а старший трит мантиссы равен N;
не-число (NaN) - все триты порядка равны P, а старший трит мантиссы равен O?
все остальные триты мантиссы игнорируются во всех трёх случаях
(кстати примерно тоже самое предлагал sva в 2008 году)

Мне представляется, что реализация троичной плавающей точки должна быть сильно проще двоичной - попробуем посчитать сколько нужно тритов для реализации точности, сравнимой с двоичным вариантом (будем прибавлять к количеству битов двоичной мантиссы 2 т.к. там есть отдельный бит знака и скрытый самый старший бит 1 для нормализованных чисел с плавающей точкой):

float (32-bit floating point) - порядок 8 мантисса 23 и 1 знак - троичный порядок 8/1.585=5.05 -> будет чуть больше 5 тритов, троичная мантисса (23+2)/1.585=15.77 -> 16 тритов т.е. всего 21;
double (64-bit floating point)- порядок 11 мантисса 52 и 1 знак - троичный порядок будет 11/1.585=6.95 -> 7 тритов, троичная мантисса (52+2)/1.585=34.07 -> 35 тритов т.е. всего 42;
x86 extended (80-bit floating point) - порядок 15 мантисса 64 и 1 знак - троичный порядок 15/1.585=9.46 -> 10 тритов, троичная мантисса (64+2)/1.585=41.64 -> 42 трита т.е. всего 52;
quad (128-bit floating point) - порядок 15 мантисса 112 и 1 знак - троичный порядок 15/1.585=9.46 -> 10 тритов, троичная мантисса (112+2)/1.585=71.93 -> 72 трита т.е. всего 82.

Значит для троичного float можно взять описанный выше вариант с 6-тритным порядком и 18-тритной мантиссой - всего 24 трита (и это будет чуть лучше, чем float).
А для троичного double - скажем пусть будет 9-тритный порядок и 39-тритная мантисса - всего 48 тритов (по точности будет где-то между 64-битной и 80-битной плавающей точкой).

P.S. Соответственно расширенная троичная плавающая точка будущего (quad) может иметь 12-тритный порядок и 84-тритную мантиссу - всего 96 тритов ( вот оно побъёт всех : )

P.P.S. Я в 2011 году начал было городить на сях библиотеку троичной арифметики с внутренним представлением числа с троичной плавающей точкой - можно её реанимировать и на ней обкатать все алгоритмы

_________________
:eugeek: https://twitter.com/Shaos1973


29 May 2020 07:59
Profile WWW
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 206
Location: Russia, S.- Peterburg
Reply with quote
В компьютере "Сетунь" есть реализация библиотеки троичных вычислений с плавающей запятой.

Программное обеспечение малой ЭВМ «Сетунь»
Хосе Рамиль Альварес, Юлия Сергеевна Владимирова
Факультет ВМК МГУ им. М. В. Ломоносова

Quote:
Для ЭВМ «Сетунь» было разработано 18 различных интерпретирующих систем [5, 6]. Для многих из них
основой стала первая созданная в ВЦ МГУ интерпретирующая система ИП-2 и библиотека стандартных подпрограмм [2].

Числа с плавающей точкой представлялись в интерпретирующих системах в виде x = X·3p
, где X – мантисса числа, p – его порядок. ИП различались способами кодирования чисел. В ИП-2 мантисса числа кодировалась 18-разрядным словом с точкой после второго разряда, порядок – пятью старшими разрядами следующего 9-разрядного слова. Точность представления составляла 16 троичных разрядов, что обеспечивало вычисления с восемью верными десятичными знаками в диапазоне изменений абсолютных значений от 10-19 до 1019.

Набор стандартных подпрограмм ИП-3 почти не отличался от аналогичного набора ИП-2, который был в
ИП-3 пополнен процедурами «упаковки» и «распаковки» числа в описанную форму. Алгоритмы работы стандартных подпрограмм ИП-3 были получены из аналогичных подпрограмм ИП-2 уменьшением порядка некоторых полиномов, связанным с меньшей точностью представления чисел в ИП-3.


Attachments:
File comment: Описание формата троичных чисел с плавающей запятой.
trf.png
trf.png [ 177.61 KiB | Viewed 1088 times ]
File comment: Программное обеспечение малой ЭВМ «Сетунь»
Sorucom2014_PO_Setun.pdf [353.45 KiB]
Downloaded 44 times

_________________
"Где просто, там ангелов со сто, а где мудрено, там ни одного" (С)
29 May 2020 13:43
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18966
Location: Silicon Valley
Reply with quote
Интересно - спасибо!
ИП-2 по точности примерно равносильно двоичному float, а вот ИП-3 по-моему грубоват (Мандельброта им красивого не построишь к примеру).
Также идея с отведением нескольких тритов под целую часть при нормализации мне не нравится - для программной симуляции может это и имеет какой-то смысл, а для аппаратной реализации сложить и сдвинуть при необходимости не составляет никакого труда - так что я буду придерживаться своего варианта -0.5 < mantissa < +0.5 и нормализация будет означать, что самый старший трит мантиссы ненулевой...

_________________
:eugeek: https://twitter.com/Shaos1973


29 May 2020 17:40
Profile WWW
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 206
Location: Russia, S.- Peterburg
Reply with quote
В каждой книге по математическому обслуживанию машины "Сетунь" в конце публикуется исходный код
ИП-2. Пытался просмотреть. Можно перенести в онлайн машину "Сетунь". http://trinary.ru/projects/setunws/

Эмулятор на Си, который пишу, в отладке и не готов. Планировал выполнить перенос исходных программ из книг по мат. обеспечению и запускать в эмуляторе.

Полный цикл книг программирования для троичной машины "Сетунь" https://www.computer-museum.ru/articles/elektronnye-versii-knig/520/

Для будущего языка программирования троичного 'C' в книгах подробно приведены описание алгоритмов троичных математических функций.

Quote:
Серия: Математическое обслуживание машины «Сетунь»
Под общей редакцией Е. А. Жоголева
Издательство Московского Университета
Московский Государственный Университет имени М. В. Ломоносова
Москва, Россия
1964-1971 гг.
Оглавление.
Выпуск 1. Е. А. Жоголев. Особенности программирования и математическое обслуживание для машины «Сетунь». (в формате html), (в формате pdf, 202 Кб), 1964 г.
Выпуск 2. Г. А. Фурман. Интерпретирующая система для действий с комплексными числами (ИП-4) (в формате html, часть 1, часть 2, часть 3), (в формате pdf, 1.84 Мб), 1964 г.
Выпуск 3. Франк Л.С, Рамиль Альварес X. Подпрограмма вычисления значений определенных интегралов для ИП-2, (в формате pdf, 774 Кб), 1964 г.
Выпуск 4. Жоголев Е. А., Есакова Л. В. Интерпретирующая система ИП-3, (в формате pdf, 593 Кб), 1964 г.
Выпуск 5. Г. А. Фурман. Подпрограмма вычисления всех корней многочлена для ИП-4, (в формате pdf, 789 Кб),1965 г.
Выпуск 6. Г. В. Прохорова. Интерпретирующая система для действий с повышенной точностью (ИП-5), (в формате pdf, 1.21 Мб), 1964 г.
Выпуск 7. В. И. Гордонова. Типовая программа расчета корреляционных и спектральных функций, (в формате pdf, 3.07 Мб), 1965 г.
Выпуск 8. Н. В. Бондаренко. Система подпрограмм ввода и вывода алфавитно-цифровой информации для ИП-3, (в формате pdf, 554 Кб), 1965 г.
Выпуск 9. Ю. Н. Черепенникова. Набор подпрограмм для ввода и вывода числовой информации в система ИП-2, (в формате pdf, 585 Кб), 1966 г.
Выпуск 10. Е. А. Жоголев, Н. Б. Лебедева. СИМПОЛИЗ 64 — Язык для программирования в символических обозначениях, (в формате pdf, 213 Кб), 1965 г.
Выпуск 11. Г. В. Прохорова. Подпрограммы ввода и вывода числовой информации для ИП-5, (в формате pdf, 3.07 Мб), 1966 г.
Выпуск 13. Н. Б. Лебедева, X. Рамиль Альварес. Инструкция использования системы ПОЛИЗ 64, (в формате pdf, 4.83 Мб), 1966 г.
Выпуск 14. Ю. Н. Черепенникова. Подпрограммы ввода и вывода чисел в системе ИП-4, (в формате pdf, 862 Кб), 1966 г.
Выпуск 15. В. Е. Федорченко. Моделирование равномерных псевдослучайных чисел на машине «Сетунь», (в формате pdf, 618 Кб), 1966 г.
Выпуск 16. Ю. Н. Черепенникова. Типовая программа для решения систем линейных алгебраических уравнений, (в формате pdf, 4.24 Мб), 1966 г.
Выпуск 17. В. И. Гордонова. Стандартная подпрограмма для вычисления собственных значений и собственных векторов вещественной матрицы, имеющей только вещественные собственные значения (в системе ИП-3), (в формате pdf, 2.97 Мб), 1967 г.
Выпуск 18. Титакаева П.Т. Стандартная подпрограмма RKG решения задачи Коши для системы обыкновенных дифференциальных уравнений в системе ИП-3, (в формате pdf, 2.46 Мб), 1967 г.
Выпуск 19. Жоголев Е. А. Интерпретирующая система ИП-2, (в формате pdf, 1.87 Мб), 1967 г.
Выпуск 21. В. И. Гордонова. Типовая программа решения системы линейных алгебраических уравнений с симметричной положительно определенной матрицей методом квадратного корня (ЛАУСК) (в формате pdf, 5.05 Мб), 1967 г.
Выпуск 23. Г. Я. Гойхман. Стандартная подпрограмма обращения матрицы методом окаймления (в системе ИП-З), (в формате pdf, 1.42 Мб) 1968 г.
Выпуск 24. А. А. Дрейер, Ю. Н. Черепенникова. Автоматизированная система статистической обработки материалов измерений на ЭЦВМ «Сетунь», (в формате pdf, 8.20 Мб), 1969 г.
Выпуск 25. Е. А. Жоголев, Л. В. Есакова. Интерпретирующая система ИП-3 (в формате pdf, 1.33 Мб), 1969 г.
Выпуск 26. Е. А. Жоголев, П. Т. Титакаева. Стандартная подпрограмма решения задачи Коши для системы обыкновенных дифференциальных уравнений методом плавающих масштабов (в системе ИП-2) (в формате pdf, 1.97 Мб), 1969 г.
Выпуск 27. Гойхман г. Я., Гордонова В. И. Программа вычисления собственных значений и собственных векторов симметричной матрицы в режиме фиксированной запятой, (в формате pdf, 6.97 Мб),1970 г.
Выпуск 28. М. Н. Лисицына. Подпрограммы для интерполяции и вычисления первых и вторых производных функций одного переменного, заданной таблично (в системе ИП-3), (в формате pdf, 2.19 Мб), 1970 г.
Выпуск 29. Трофимов Е. П., Стелина Н. Ю. Стандартная программа вычисления функций Бесселя (в системе ИП-3), (в формате pdf, 929 Кб),1970 г.
Выпуск 30. Н. Н. Кирсанова Спектральный анализ временных рядов с применением алгоритма FFT (быстрого преобразования Фурье) (в формате pdf, 7.41 Мб),1971 г.
Об авторе: Московский Государственный Университет имени М. В. Ломоносова
Москва, Россия
1964 г.


_________________
"Где просто, там ангелов со сто, а где мудрено, там ни одного" (С)


31 May 2020 06:00
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18966
Location: Silicon Valley
Reply with quote
Система команд Сетуни слишком эзотерическая - проще заново всё написать с более современным подходом

_________________
:eugeek: https://twitter.com/Shaos1973


31 May 2020 08:45
Profile WWW
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 206
Location: Russia, S.- Peterburg
Reply with quote
Shaos wrote:
Система команд Сетуни слишком эзотерическая - проще заново всё написать с более современным подходом


Это точно! Как смогли мужики в 50-х придумать такое!?

В книгах хорошее описание троичных алгоритмов.

_________________
"Где просто, там ангелов со сто, а где мудрено, там ни одного" (С)


31 May 2020 11:01
Profile WWW
Novelist
User avatar

Joined: 01 Jun 2020 08:52
Posts: 25
Location: Новосибирск
Reply with quote
Если верно всё понял, предлагаю свою типы по первому способу:
float27: 9 тритов (целое) + 18 тритов (дробь). Целая часть принимает значения в диапазоне [-9841; +9841]. Дробная часть принимает значения в диапазоне: [-193710244; +193710244].
float81: 27 тритов (целое) + 54 тритов (дробь). Целая часть принимает значения в диапазоне [-3812798742493; +3812798742493]. Дробная часть принимает значения в диапазоне: [-7.8502144954104e+26; +7.8502144954104e+26].

Примеры:
float27: POP NPN OPP OOO PPP PPP NPN PPO PPP = 7105.007159846
float81: OOO NON PPO ONO NOO NOO NPP NNP OOO OPN OOO NPP POP PPO PNN PPO OPP PPO OOP OPN NOP PON PPP POO PNO NPO NPP-100002496941.42937600012687886
Надеюсь, ничего не перепутал.

_________________
Программист, либертарианец и просто свободный человек.


02 Jun 2020 08:54
Profile
Doomed
User avatar

Joined: 21 Mar 2017 13:50
Posts: 633
Location: Spb
Reply with quote
poststatist wrote:
Надеюсь, ничего не перепутал.

Перепутали. Число с плавающей точкой это мантисса и порядок, то что привели вы это фиксированная точка.


02 Jun 2020 13:10
Profile
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 206
Location: Russia, S.- Peterburg
Reply with quote
Необходим новый подход с формату с лучшими свойствами троичной чисел плавающей точки.

Quote:
тип данных, называемый posit, разработан в качестве прямой замены чисел с плавающей точкой стандарта IEEE Standard 754. В отличие от ранней формы — арифметики универсальных чисел (unum), стандарт posit не требует использования интервальной арифметики или операндов переменного размера, и, как и float, числа posit округляются, если результат не может быть представлен точно. Они имеют неоспоримые преимущества над форматом float, включая больший динамический диапазон, большую точность, побитовое совпадение результатов вычислений на разных системах, более простое аппаратное обеспечение и более простую поддержку исключений. Числа posit не переполняются ни в сторону бесконечности, ни до нуля, и «нечисла» (Not aNumber, NaN) — это действия, а не битовые комбинации.



Ссылки:
1. Anatomy of a posit number - https://www.johndcook.com/blog/2018/04/11/anatomy-of-a-posit-number/
2. Posit-арифметика: победа над floating point на его собственном поле. Часть 1 - https://habr.com/ru/post/465723/
3. Posit-арифметика: победа над floating point на его собственном поле. Часть 2 - https://habr.com/ru/post/466813/


Attachments:
a5siaa774cuuedkek1kixglnbiy.jpeg
a5siaa774cuuedkek1kixglnbiy.jpeg [ 41.09 KiB | Viewed 981 times ]

_________________
"Где просто, там ангелов со сто, а где мудрено, там ни одного" (С)
03 Jun 2020 00:44
Profile WWW
Maniac
User avatar

Joined: 04 Jan 2016 10:15
Posts: 206
Location: Russia, S.- Peterburg
Reply with quote
Posit числа: теоретическое и практическое применения

Quote:
Цель исследования
При проведении исследования была поставлена следующая цель:
разработать калькулятор, поддерживающий операции над posit числами.
Были выполнены следующие задачи:
 Изучить posit числа
 Изучить WebAssembly и его применение
 Изучить библиотеку React
 Применить полученные знания для создания калькулятора


См. файл.


Attachments:
File comment: Posit числа: теоретическое и практическое применения
257_3681.pdf [1.05 MiB]
Downloaded 54 times

_________________
"Где просто, там ангелов со сто, а где мудрено, там ни одного" (С)
05 Jun 2020 06:40
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18966
Location: Silicon Valley
Reply with quote
не - нанадо нам ваш posit :mrgreen:

_________________
:eugeek: https://twitter.com/Shaos1973


05 Jun 2020 18:16
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 11 posts ] 

Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.