Re[3]: Типы чисел в DSL
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.12.23 08:43
Оценка: 9 (1)
Здравствуйте, Alekzander, Вы писали:
A>Какой там домен? Вот и у меня, будем считать, такой же. Домен "Универсальный", как сказали бы маркетологи.
Ну вот обратите внимание — авторы Outlook уже в доисторические времена не стали заморачивать людей интами и флоатами. Нумбер и точность — вот наши друзья!

A>Это-то я хорошо понимаю. Но вот столкнувшись с необходимостью как-то имплементировать, я понял, что это не так-то просто.

Ну вариантов тут несколько.
Помимо уже обсуждавшихся чисел с фиксированной точностью, есть упомянутый одним из коллег Rational.
Он ведёт себя прилично везде, кроме возведения в нецелые степени и тригонометрии.
У него преимущество перед decimal — в отсутствии маеты с разрядностью. Например, нам не нужно ни заставлять человека указывать, сколько знаков после запятой будет у X. И не нужно думать, сколько знаков после запятой будет у z, который равен x / y. Или как нам сделать что-то типа x = x * y, если у игрека после запятой не ноль знаков.
Недостаток у него — в отсутствии разрядности. Number(2) всегда превращается в строку с 2мя знаками, даже если внутри него целое число. И округляется всегда до запрошенного количества знаков.
А Rational нужно округлять вручную, и разрядность указывать при выводе.

S>>Переполнения интов и потери точности для double ведут себя в бытовых сценариях настолько противоестественно, что даже программисты часто ошибаются.


S>>Пункт 1: double не нужен вообще ни для чего, кроме научных расчётов. Если ваша предметная область — не про физику/математику, то забудьте про дабл как про страшный сон.

S>>Пункт 2: так называемые "целые" двоичной разрядности имеют только одно полезное свойство: они быстро обрабатываются компьютером.
S>>Пункт 3: Если в вашей предметной области нет расчётов с триллионами значений, то длинные десятичные будут гораздо более адекватным выбором.
S>>Если есть — то тогда вам пригодятся ограниченные десятичные, которые лишь чуть-чуть медленнее интов, зато ведут себя предсказуемо.

S>>Так что я бы оставил в языке понятие number с известным количеством цифр после запятой (и неограниченным — до запятой).

S>>Если окажется, что такие длинные числа приводят на практике к нехорошестям, то оптимизировал бы язык, заменив в нём представление number на ограниченное.

A>Понял, принял. Буду думать ))
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.