Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87

Какой тип данных существует для отображения с максимальной точностью?

09.10.2017, 09:53. Показов 4190. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа на VB.net bissection method. С помощью типа данных Decimal удается найти решение с точностью максимум 1E-28. Что надо сделать, чтобы программа еще более точно давала решение, какой тип данных использовать? Например с точностью 1E-29 до 1E-36
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2017, 09:53
Ответы с готовыми решениями:

Какой компонент лучше всего подойдет для отображения табличных данных
Здравствуйте !!! Делаю небольшую программку, используя Windows Forms. Нашёл там стандартные диалоги для выбора файла, печати и т.п. Но...

Какой тип базы данных лучше выбрать для небольшого количества данных
Здравствуйте. На работе есть программа на FoxPro 2.6 написана, имеет 12 баз данных (dbase, *.dbf) общим объемом 9 мб, хочу в рамках диплома...

Какой тип данных лучше для БД
Здравствуйте, хочу сделать свою БД типа ключ - значение. Какой лучше использовать тип данных? QMap, QHash или какой-то другой и...

69
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
18.10.2017, 21:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Winney Посмотреть сообщение
Для начала определитесь, какая операция в вашем случае будет приводить к потере точности.
Использование типа Decimal и приводит к потере точности. Правда то что тип Decimal может максимум выдать точность в 1e-28?
Если использовать тип BigFloat, то mXparser(возвращает значение в Double) не может принять значение в BigFloat, но работает с Decimal.
Цитата Сообщение от Winney Посмотреть сообщение
Кроме того, в вашем случае применение сторонних библиотек врядли будет расценено как правильное решение задачи.
Преподаватель сам говорил искать сторонние библиотеки для работы с большими числами
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 21:41
Цитата Сообщение от Skyls Посмотреть сообщение
Правда то что тип Decimal может максимум выдать точность в 1e-28?
ОДНОЗНАЧНО ДА. См. MSDN.

Цитата Сообщение от Skyls Посмотреть сообщение
Если использовать тип BigFloat, то mXparser(возвращает значение в Double) не может принять значение в BigFloat, но работает с Decimal.
Плюньте на это, ибо сама задача подразумевает ПОИСК решения, а не использование готовых типов или библиотек!!! Или вы думаете 1E-28 там случайно появились???

Далее:
1. Сам по себе тип Decimal обладает достаточной точностью.
2. Зачем ОН вам??? Разве в тексте задачи сказано что функция задана с использованием чисел высокой точности???
3. В большинстве житейских случаев к потере точности приводит ДЕЛЕНИЕ, в том или ином его проявлении.
1
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
18.10.2017, 21:56  [ТС]
Цитата Сообщение от Winney Посмотреть сообщение
Далее:
1. Сам по себе тип Decimal обладает достаточной точностью.
2. Зачем ОН вам??? Разве в тексте задачи сказано что функция задана с использованием чисел высокой точности???
3. В большинстве житейских случаев к потере точности приводит ДЕЛЕНИЕ, в том или ином его проявлении.
Понял вас) Хрен с этой точностью, уже замучился пробовать разные варианты. Я лучше добавлю опцию построения графика функции и попробую сдать))
Спасибо вам за помощь!
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 22:02
На мой взгляд решить эту задачу в общем виде с использованием стандартных типов весьма трудоёмко. Но в общем ответ таков, что либо мы все переводим в целые числа путем умножения на заданную точность, либо используем поразоядные операции с использованием строкового типа. Последний теоретически должен позволить обеспечить точность до 1е-(10**2Гигабайта), что более чем достаточно)))))
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
18.10.2017, 22:17  [ТС]
Цитата Сообщение от Winney Посмотреть сообщение
мы все переводим в целые числа путем умножения на заданную точность
Дело в том, что mXparser максимум работает с Decimal, в таком случае остается лишь изобретать свой парсер или искать другой. Окончательно выяснил, что проблема только в mXparser, потому что он не хочет работать с другими типами.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 22:31
Бррр....
А попробуйте, если преобразовать уравнение f(x) = 0 к виду a(x)=b(x), а затем a(x)/b(x)=1?
Ведь при всем уважении к NET повлиять на внутренние алгоритмы решения различных сложных функций типа тригонометрических вы врядли сможете кодом в десяток строк.

А вот вычислив сколь угодно сложные функции стандартным образом и поделив их друг на друга с использованием преобразований в целые числа - вполне посильная задачка на вечер) в этом случае точность от деления будут определяться как (a(x)/b(x))*10**ТОЧНОСТЬ - 1*10**ТОЧНОСТЬ.

Могу конечно и ошибаться, но мой воспаленный разум придумал только такое решение для общего вида.

Цитата Сообщение от Skyls Посмотреть сообщение
Дело в том, что mXparser
Используя mXparser вы используйте чужие решения, такой способ не годится
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
18.10.2017, 22:36  [ТС]
Ошибочка не mXparser, а lundin mathparser
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 22:37
Это не принципиально
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
19.10.2017, 00:33
Частный случай: получение корня степени n с использованием метода биссекции.
Источник: https://www.codeproject.com/Ti... -Nth-Roots
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Imports System.Numerics
Public Class Form3
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim rm As BigInteger = 0
        'Dim nroot As BigInteger = BigMath.nthRoot(BigInteger.Parse(Convert.ToString("2") & New String("0"c, 100)), 2, rm)
        'Dim nroot As BigInteger = BigMath.nthRoot(BigInteger.Parse(Convert.ToString("3") & New String("0"c, 100)), 2, rm)
        'Dim nroot As BigInteger = BigMath.nthRoot(BigInteger.Parse(Convert.ToString("10") & New String("0"c, 100)), 4, rm)
        Dim nroot As BigInteger = BigMath.nthRoot(BigInteger.Parse(Convert.ToString("2") & New String("0"c, 1000)), 2, rm)
        TextBox1.Text = nroot.ToString
    End Sub
End Class
Public Class BigMath
    Public Shared Function nthRoot(value As BigInteger, root As Integer, ByRef remainder As BigInteger) As BigInteger
        If root < 1 Then
            Throw New Exception("root must be greater than or equal to 1")
        End If
        If value < 0 Then
            Throw New Exception("value must be a positive integer")
        End If
        If value = 1 Then
            remainder = 0
            Return 1
        End If
        If value = 0 Then
            remainder = 0
            Return 0
        End If
        If root = 1 Then
            remainder = 0
            Return value
        End If
        Dim upperbound = value
        Dim lowerbound = BigInteger.Parse("0")
        While True
            Dim nval = (upperbound + lowerbound) / 2
            Dim tstsq = BigInteger.Pow(nval, root)
            If tstsq > value Then
                upperbound = nval
            End If
            If tstsq < value Then
                lowerbound = nval
            End If
            If tstsq = value Then
                lowerbound = nval
                Exit While
            End If
            If lowerbound = upperbound - 1 Then
                Exit While
            End If
        End While
        remainder = value - BigInteger.Pow(lowerbound, root)
        Return lowerbound
    End Function
End Class
Миниатюры
Какой тип данных существует для отображения с максимальной точностью?  
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
19.10.2017, 12:49  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Imports System.Numerics
У вас только при этой библиотеки работает BigInteger?
0
1550 / 1527 / 325
Регистрация: 03.10.2012
Сообщений: 1,558
19.10.2017, 13:14
Skyls, класс BigInteger содержится в пространстве имен System.Numerics, находящегося в NET Framework 4 и выше
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
19.10.2017, 13:39
Skyls, думаю, будет интересно почитать по вашей теме:
Скиена С. Алгоритмы. Руководство по разработке., 2-е издание, Спб 2014 –
13.9 Арифметика произвольной точности.
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
19.10.2017, 14:59  [ТС]
Не имею представления как можно применять BigInteger в моей программе, чтобы ответ был дробным.

Можно ли как нибудь отредактировать код библиотеки lundin mathparser формата dll, имеется в виду добавить поддержку BigFloat, если да то каким образом можно это сделать?
0
Эксперт .NET
 Аватар для Rius
13830 / 7902 / 1708
Регистрация: 25.05.2015
Сообщений: 23,997
Записей в блоге: 14
20.10.2017, 16:23
Цитата Сообщение от Skyls Посмотреть сообщение
Можно ли как нибудь отредактировать код библиотеки lundin mathparser формата dll
DLL не нужно редактировать. Автор библиотеки выложил исходники.
Цитата Сообщение от Skyls Посмотреть сообщение
добавить поддержку BigFloat, если да то каким образом можно это сделать?
В исходниках библиотеки надо заменить все случаи использования double на нужный вам тип.
Это не просто. И само оно не сделается.
1
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
21.10.2017, 16:43  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
В исходниках библиотеки надо заменить все случаи использования double на нужный вам тип.
Заменить и собрать Dll файл, вы имеете в виду?

Добавлено через 15 секунд
Цитата Сообщение от Rius Посмотреть сообщение
В исходниках библиотеки надо заменить все случаи использования double на нужный вам тип.
Заменить и собрать Dll файл, вы имеете в виду?
0
Эксперт .NET
 Аватар для Rius
13830 / 7902 / 1708
Регистрация: 25.05.2015
Сообщений: 23,997
Записей в блоге: 14
21.10.2017, 16:49
Да, так.
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
21.10.2017, 17:58  [ТС]
Rius, в исходнике есть такой код:
C#
1
public override BigFloat ToDouble(IFormatProvider format)
Как изменить ToDouble в ToBigFloat, если я меняю на ToBigFloat, то выходит ошибка не удалось найти метод для преопределения?
0
Эксперт .NET
 Аватар для Rius
13830 / 7902 / 1708
Регистрация: 25.05.2015
Сообщений: 23,997
Записей в блоге: 14
21.10.2017, 18:02
Я же говорил, это делается не просто, очень не просто. Одним методом не обойтись.
Возьмите разжёванный пример анализа методом рекурсивного спуска и реализуйте с BigFloat в качестве типа данных. Какой тип данных существует для отображения с максимальной точностью?
0
2 / 2 / 0
Регистрация: 14.12.2013
Сообщений: 87
21.10.2017, 19:38  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Я же говорил, это делается не просто, очень не просто. Одним методом не обойтись.
Да вы были правы. В общем все удалось перевести BigFloat, кроме этих Math.Pow, Math.Cos и т.д., они только double возвращают...
0
Эксперт .NET
 Аватар для Rius
13830 / 7902 / 1708
Регистрация: 25.05.2015
Сообщений: 23,997
Записей в блоге: 14
21.10.2017, 19:43
См http://www.extremeoptimization... th(T).aspx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2017, 19:43

Какой тип данных для слов?
Есть программа - #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; class CState{ }; void...

Какой тип данных использовать для listview
Всем привет. Есть listview1 в котором много строк и около 5 столбцов. Когда применяю фильтр какой-либо, строк в listview1 становится...

Какой тип данных использовать для дробного значения
У меня уже давно появилась проблема, часто нужно вписать дробное значение и чтобы была валидация. Как это сделать? потому что какой бы...

Какой тип данных использовать для арифметического выражения?
Добрый день. У меня возникла необходимость хранить данные в столбце такого типа: '1000-20-20-20-20-20-20-20-20-20-20' У меня...

Какой тип данных нужен для возведения в степень
Добрый день. При возведении числа в степень столкнулся с проблемой, что при возведении числа 9 в 8 степень (как пример) выдает абракадабру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru