powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
25 сообщений из 28, страница 1 из 2
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
    #40065409
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Внимание, "удвоенной" в теме поста означает "удвоенной относительно 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
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
    #40065453
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давным-давно, ещё во времена 4-й версии, использовал библиотеку работы со сверхдлинными числами. Вообще без ограничения на размер (реально - конечно, ограничение было, что-то типа 100к цифр). Причём именно работы с вещественными, правда, набор операций был достаточно ограничен. Сейчас, конечно, концов уже не найду.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Хм, а разве при такой разнице в числах на двадцать-сто порядков, получится ли приемлемую точность на классическом double/двойном double? Мантисса ведь нерезиновая.
...
Рейтинг: 0 / 0
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
    #40075293
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldfanate,"разница сто порядков" -- там умножение, так что проблем не будет. А вот выражение в скобках -- да, там нужна соответствующая мантисса... так для того пример и придуман.
...
Рейтинг: 0 / 0
Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
    #40083620
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван 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
25 сообщений из 28, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Есть ли библиотеки, подключаемые к VB, реализующие арифметику "удвоенной" точности?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (2)
Пользователи онлайн (10): Анонимы (6), RePredeclared, Bing Bot 2 мин., Yandex Bot 4 мин., CerebroSQL 4 мин.
x
x
Закрыть


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