Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности? / 25 сообщений из 28, страница 1 из 2
24.04.2021, 12:58
    #40065409
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
(Внимание, "удвоенной" в теме поста означает "удвоенной относительно Double"! )

Хочется такие процедуры:
Код: vbnet
1.
2.
3.
Сложить(x1, x2, y1, y2, res1, res2),
Умножить(x1, x2, y1, y2, res1, res2) и
Поделить(x1, x2, y1, y2, res1, res2),

которые реализовывали бы арифметические действия:
Код: vbnet
1.
2.
3.
(res1 + res2) = (x1 + x2) + (y1 + y2)
(res1 + res2) = (x1 + x2) * (y1 + y2)
(res1 + res2) = (x1 + x2) / (y1 + y2)

-- с этой самой "удвоенной относительно Double" точностью (все написанные выше и ниже переменные сами по себе -- типа Double).

Понятно, что имеются в виду не произвольные пары (p1, p2), а соотносящиеся друг с другом как "основная часть числа" и его "хвост" (не помещающийся в представление Double). То есть эти самые процедуры Сложить(), Умножить() и Поделить() должны таким образом возвращаемые значения формировать

А мы на входе в код, работающий с этими "процедурами удвоенной точности", будем делать:
Код: vbnet
1.
Let x1 = x: Let x2 = 0#

-- и на выходе из этого кода делать обратное:
Код: vbnet
1.
2.
Let res = res1
(а res2 просто отбрасывать)

здесь x -- исходное данное, а res -- результат расчёта.
...
Рейтинг: 0 / 0
24.04.2021, 17:01
    #40065453
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Давным-давно, ещё во времена 4-й версии, использовал библиотеку работы со сверхдлинными числами. Вообще без ограничения на размер (реально - конечно, ограничение было, что-то типа 100к цифр). Причём именно работы с вещественными, правда, набор операций был достаточно ограничен. Сейчас, конечно, концов уже не найду.

Опять же давно где-то видел статью, в которой описывался класс для работы со сверхдлинными числами вообще тупо в текстовом представлении - там были только арифметические операции, но зато всё было реализовано на VB (или VBA? не помню).

Так что, наверное, можно поискать, и если повезёт - адаптировать под нынешнюю версию.

Написать же собственный класс для работы с числами в 70-80 значащих цифр и только арифметическими операциями вообще не должно представлять проблемы.
...
Рейтинг: 0 / 0
24.04.2021, 17:25
    #40065457
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Akina,

Если я правильно понял, автор топика хочет "удвоенной относительно Double". Это quadruple precision формат с плавающей точкой, занимающий в 2 раза больше чем Double, 128 бит или 16 байт в памяти. Появился недавно в новой редакции стандарта IEEE 754.
Такой тип данных реализован в некоторых компиляторах C++ и Fortran. Но из-за того, что платформа x86-64 не имеет аппаратной поддержки вычислений чисел с плавающей запятой четверной точности все вычисления с таким форматом проходят очень медленно.
Для VB таких библиотек нет. Программисту такой формат данных не нужен.
...
Рейтинг: 0 / 0
24.04.2021, 17:31
    #40065458
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Почему нет, мне тоже попадалась когда-то ссылка на либу, которая может выполнять вычисления для чисел любой точности, все числа представлялись в виде строковых представлений, работает понятное дело медленнее, чем "родной" формат, но скорость не всегда важна.

ТС, как понимаю, просто не хочет потерять точность при выполнении некоторых операций, а результат вернется к обычному double
...
Рейтинг: 0 / 0
24.04.2021, 17:45
    #40065460
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Есть либа для GCC называется libquadmath , там есть возможность конвертировать string во _float128 и обратно.
Может ее можно прикрутить к VB, передавая и принимая числа четверной точности через строки.
...
Рейтинг: 0 / 0
24.04.2021, 17:57
    #40065465
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Shocker.Pro
просто не хочет потерять точность при выполнении некоторых операций, а результат вернется к обычному double
именно так. Или, скажем, иметь возможность некоторую последовательность арифметических операций осуществить с повышенной (двойной) точностью, чтобы проверить/убедиться, что в них не происходит "драматическая" потеря точности.
...
Рейтинг: 0 / 0
24.04.2021, 18:29
    #40065472
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Eolt
передавая и принимая числа четверной точности через строки.
я согласен передавать числа четверной точности (из одной арифметической операции в другую) в виде пар (обычных) чисел двойной точности. Мне нужно, чтобы эти "демоны" там внутри себя с ними заявленную арифметическую операцию выполняли.

На самом деле, мне даже не важно, как именно это число четверной точности будет "размазано" по этим двум Double, если будет определена операция порождения этой пары (которая может быть и не " Let x1 = x: Let x2 = 0# ") и операция возвращения обратно в Double-значение (которая может быть и не " Let res = res1 (а res2 просто отбрасывать) ")
...
Рейтинг: 0 / 0
24.04.2021, 20:48
    #40065488
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
В чем смысл пожелалки - величить максимально представимую степень или только число точных десятичных знаков знаков в мантиссе?

Если только второе, то, может быть, вы просто не знаете , что для VB/VBA
стандартно доступен числовой десятичный тип с точностью представления в 28 десятичных знаков?
В таком случае откройте для себя cdec(...)
...
Рейтинг: 0 / 0
24.04.2021, 20:48
    #40065489
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Eolt
Такой тип данных реализован в некоторых компиляторах C++ и Fortran. Но из-за того, что платформа x86-64 не имеет аппаратной поддержки вычислений чисел с плавающей запятой четверной точности все вычисления с таким форматом проходят очень медленно.
В своё время и с сопроцессорами было туго, и в программу могла линковаться библиотека эмуляции операций с плавающей точкой. Конечно, работало медленнее, но сказать, что катастрофически медленнее - скорее, нет.

Иван FXS
На самом деле, мне даже не важно, как именно это число четверной точности будет "размазано" по этим двум Double

Гораздо проще реализовывать, если хранить два Long и одно Power.
...
Рейтинг: 0 / 0
24.04.2021, 21:11
    #40065495
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
booby
В таком случае откройте для себя cdec
да, cdec -- в смысле "субтип Decimal типа данных Variant" -- я когда-то точно проходил мимо, но сейчас просто не вспомнил. Ну и он тривиально в лоб, конечно, не работает, поскольку нужно будет самому всю логику обработки десятичных степеней операндов (исполняемой арифметической операции) реализовывать. Но всё равно спасибо.
...
Рейтинг: 0 / 0
24.04.2021, 21:22
    #40065496
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS
booby
В таком случае откройте для себя cdec
да, cdec -- в смысле "субтип Decimal типа данных Variant" -- я когда-то точно проходил мимо, но сейчас просто не вспомнил. Ну и он тривиально в лоб, конечно, не работает, поскольку нужно будет самому всю логику обработки десятичных степеней операндов (исполняемой арифметической операции) реализовывать. Но всё равно спасибо.

чего-чего?
Ваше бы упорство, да в мирных целях.
...
Рейтинг: 0 / 0
24.04.2021, 21:27
    #40065498
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
booby, ну, распишите (или просто подумайте), как вы будете через Decimal вычислять выражение

(1.2E34 - 5.6E7) * 8.9E-123
...
Рейтинг: 0 / 0
24.04.2021, 21:32
    #40065499
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS
booby, ну, распишите (или просто подумайте), как вы будете через Decimal вычислять выражение

(1.2E34 - 5.6E7) * 8.9E-123

я не буду.
Ладно, забудь.
...
Рейтинг: 0 / 0
24.04.2021, 21:36
    #40065500
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
booby
Ладно, забудь.
нет, я как раз не забуду, поскольку вариант рабочий, вполне реализуемый ... и понятно как.
...
Рейтинг: 0 / 0
25.04.2021, 08:22
    #40065551
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Akina
Гораздо проще реализовывать, если хранить два Long и одно Power
то есть числитель и знаменатель (и дополнительно степень десятичного масштабирующего множителя)? А что, хорошая идея -- запросто можно не два, а три числа передавать!
...
Рейтинг: 0 / 0
25.04.2021, 09:02
    #40065554
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
просто положу это здесь (по ассоциации):

хороший способ оценить точность решения системы линейных уравнений -- решить её повторно, трактуя диагональ (матрицы коэффициентов) не стандартным образом -- как проходящую "с северо-запада на юго-восток", -- а как проходящую "с юго-запада на северо-восток". И сравнить получившиеся решения.
...
Рейтинг: 0 / 0
26.04.2021, 10:24
    #40065825
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS
то есть числитель и знаменатель (и дополнительно степень десятичного масштабирующего множителя)? А что, хорошая идея -- запросто можно не два, а три числа передавать!
кстати, если мы храним числа так -- в виде числителя и знаменателя рациональной дроби, то мы используем в два раза больше места и облегчаем себе операцию деления, -- оно же взятие обратного числа, сводящееся к простому перевороту дроби, -- хотя и существенно усложняем операцию сложения -- нужно приводить дроби к единому знаменателю, то есть сложение содержит в себе ТРИ умножения.

Но, главное, мы не повышаем точность своих вычислений, поскольку она определяется разрядностью хранения конкретно числителя (или знаменателя -- довольно естественно думать, что разрядности будут использованы одинаковые).
...
Рейтинг: 0 / 0
20.05.2021, 01:39
    #40071546
user-77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Shocker.Pro,

Хотелось бы найти такую библиотеку. Я вот искал и не нашел. А когда спрашивал тут про это самое..
"строковый калькулятор" мне никто ни хрена не сказал. Я пробовал сам написать деление. Реально получается,
что там не только деление, но и сложение конечно.
Это было давно и результат моего опыта был такой: кажется, что все работает, но потом на каком-то числе,
когда он должен был выдать результат типа 30-50k знаков после запятой - оказалось что-то типа...
цифры верные, опять верные... потом хлоп.. странный кусок типа 0000000, а потом бац - дальше опять правильно.

Т.к. я тогда так и не разобрался в чем была ошибка - тупо на это забил.
А вообще я знаю только один сайт с помощью которого можно хотя бы сравнить свой результат с правильным:
https://www.wolframalpha.com/
...
Рейтинг: 0 / 0
20.05.2021, 01:42
    #40071547
user-77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Akina,

Если это так просто, почему в сети по сей день нет калькулятора, который бы давал
100k значимых цифр после запятой?
...
Рейтинг: 0 / 0
20.05.2021, 10:28
    #40071574
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS,

Если тебе действительно важна точность, используй любой доступный bignumber, преобразовывай его в double после использования и не делай никому голову.
...
Рейтинг: 0 / 0
21.05.2021, 03:49
    #40071830
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
crutchmaster,

1) вы видите, что тема размещена в разделе Visual Basic?

2) Вы знаете Visual Basic?

3) Назовите конкретный bignumber, который в Visual Basic решает сформулированную в посте задачу.
...
Рейтинг: 0 / 0
24.05.2021, 13:08
    #40072438
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS
Вы знаете Visual Basic?

Поверхностно.

Иван FXS
Назовите конкретный bignumber, который в Visual Basic решает сформулированную в посте задачу

У вба нет репозитория с библиотеками, как у всех нормальных яп? Bigdecimal - это одно из первых, что пишут, потому что без него серьёзные фин. расчёты делать нельзя никак. За десятилетия его существования должно что-то быть по любому. Мне беглый гуглёж показывает всякий шлак, возможно я не знаю как гуглить. Поищите на официальных ресурсах, если вы в теме.
...
Рейтинг: 0 / 0
27.05.2021, 17:44
    #40073620
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS
booby, ну, распишите (или просто подумайте), как вы будете через Decimal вычислять выражение

(1.2E34 - 5.6E7) * 8.9E-123


Хм, а разве при такой разнице в числах на двадцать-сто порядков, получится ли приемлемую точность на классическом double/двойном double? Мантисса ведь нерезиновая.
...
Рейтинг: 0 / 0
03.06.2021, 01:24
    #40075293
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
ldfanate,"разница сто порядков" -- там умножение, так что проблем не будет. А вот выражение в скобках -- да, там нужна соответствующая мантисса... так для того пример и придуман.
...
Рейтинг: 0 / 0
13.07.2021, 17:50
    #40083620
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Иван FXS,

библиотек арифметики с произвольной точностью известно доаольно много: List of arbitrary-precision arithmetic software , одна из самых известных - GNU MPFR .

Демка для VB официального примера работы с ней здесь .

Библиотека компилировалась в MSVC 2019, поэтому потребуеЦЦа Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019 , для Win32 скачайте и установите (если ещё не) vc_redist.x86.exe.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности? / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]