Есть ли способ избежать погрешности переменной float?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 28 мар 2019, 18:55

1max1 писал(а):
А как их (double) объявлять?

Ты такие каверзные вопросы задаешь и не знаешь что такое double? :))
Это всё равно что если бы Билл Гейтс спросил как открыть панель управления на винде...
Синтаксис:
Используется csharp
double value = 1.5; // Тоже что и float, но точнее в 2 раза, потому и называется double
 

Да яж написал, что не знал что это. Погуглил. Существует ещё decimal.
Но походу проблема совсем не во float. А в методах решения системы. Методом попарной подстановки в системе из трёх уравнений четвёртой степени я получаю систему из трёх уравнений второй степени. Типа
SM^2 = блабла1.
SM^2 = блабла2.
SM^2 = блабла3.
Все блабла практически равны нулю. А длина SM - конкретная величина. А все предыдущие решения проверены на практике с незначительными ошибками.
Что это значит ? Я кажется понял. А вы знаете, как решать систему из трёх уравнений с одной переменной? То есть я что хочу сказать. Абсолютно точно существует система из трёх уравнений стопроцентно проверенная. С одной переменной в квадрате. Причем зная решение я подставляю эту переменную и система работает со всеми тремя уравнениями.... Но я не могу получить эту переменную в квадрате ни из одного уравнения. Как такое может вообще быть? Это система линейных уравнений гомографии треугольника. На практике методом подстановки система должна иметь только одно решение с положительным множителем длины векторов. И считается моментально.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение alew 28 мар 2019, 21:50

А чуму равен косинус > 360 или синус < 0 ??? :-o
alew
UNIт
 
Сообщения: 76
Зарегистрирован: 23 ноя 2018, 19:59

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 04:53

Вот и я о том же. Кто придумал этого Пифагора с Декартом? Очень удобные посоны.
Выглядит это так.
Три уравнения, где SM^4 и SM^2 - неизвестные. Остальное перемножение косинусов и сторон треугольника.

Скрытый текст:
>>>SM4 = (SM2*K101 + K201)/K301;
>>>SM4 = (SM2*K102 + K202)/K302;
>>>SM4 = (SM2*K103 + K203)/K303;


Вывожу левую и правую часть каждого уравнения.
469.4444=469.383
UnityEngine.Debug:Log(Object)
Ок. Все три бьют. Далее попарно подставляю и выхожу на квадраты.
Скрытый текст:
//SM2*K101*K302 + K201*K302 = SM2*K102*K301 + K202*K301;
//SM2*K101*K303 + K201*K303 = SM2*K103*K301 + K203*K301;
//SM2*K102*K303 + K202*K303 = SM2*K103*K302 + K203*K302;

Вывод
Скрытый текст:
6.023673E-13=6.023673E-13
7.210825E-12=7.210824E-12
1.450392E-12=1.450392E-12

Далее перебрасываю неизвестные влево.
Скрытый текст:
//SM2*(K101*K302 - K102*K301) + K201*K302 = + K202*K301;
//SM2*(K101*K303 - K103*K301) + K201*K303 = + K203*K301;
//SM2*(K102*K303 - K103*K302) + K202*K303 = + K203*K302;

Вывод
Скрытый текст:
-8.988893E-13=-8.988893E-13
-1.076043E-11=-1.076044E-11
-2.164363E-12=-2.164364E-12


Известные вправо.
Скрытый текст:
//SM2*(K101*K302 - K102*K301) = + K202*K301 - K201*K302;
//SM2*(K101*K303 - K103*K301) = + K203*K301 - K201*K303;
//SM2*(K102*K303 - K103*K302) = + K203*K302 - K202*K303;

Вывод.

Скрытый текст:
Матерь божья как так то?!!!!
-4.038614E-20=2.546844E-20
7.021927E-19=-1.673251E-19
2.384822E-19=-9.497933E-20
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 17:26

seaman писал(а):Уберите в Mathf последнюю букву 'f' и обрадуйтесь работой с double!

Чот не получается никак.
Скрытый текст:
Изображение

Версия unity 5.6.1f
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение Saltant 29 мар 2019, 17:29

NOVA писал(а):
seaman писал(а):Уберите в Mathf последнюю букву 'f' и обрадуйтесь работой с double!

Чот не получается никак.
Скрытый текст:
Изображение

Версия unity 5.6.1f

Синтаксис:
Используется csharp
using System;
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 18:06

Saltant писал(а):
NOVA писал(а):
seaman писал(а):Уберите в Mathf последнюю букву 'f' и обрадуйтесь работой с double!

Чот не получается никак.
Скрытый текст:
Изображение

Версия unity 5.6.1f

Синтаксис:
Используется csharp
using System;


Спасибо! А Decimal ещё не родилось в unity?
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение 1max1 29 мар 2019, 18:30

А при чем тут юнити? decimal тип из c# такой же как и флоат и дабл.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 18:35

А ТЕПЕРЬ ВНИМАНИЕ - РЕЗУЛЬТАТЫ. Я кажется поломал алгебру.

Скрытый текст:
Изображение


Вывод Debug где левая часть уравнения должна быть равна правой.
Три результата.
Скрытый текст:
Изображение


Далее переношу постоянные в правую часть уравнения, оставляя SM2 в левой.

Скрытый текст:
Изображение


Вывод.
Скрытый текст:
Изображение


@-)
Кажется пора в церковь сходить. ^:)^

Как блин из равенства можно получить неравенство переносом одного числа????????

Там заметны симметричные результаты, скоро доэксперементируюсь и портал в параллельный мир открою. Мракобесие какое-то.

А дайте пожалуйста информацию по Decimal? Как объявлять и оперировать? Так я не хочу упрощать 150 произведений.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение 1max1 29 мар 2019, 19:09

Попробуй раскрыть скобки:
Синтаксис:
Используется csharp
double Left1 = SM2 * K101 * K302 - SM2 * K102 * K301;
double Right1 = +K202 * K301 - K201 * K302;

Я думаю decimal не спасет, числа реально очень маленькие.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 19:16

1max1 писал(а):Попробуй раскрыть скобки:
Синтаксис:
Используется csharp
double Left1 = SM2 * K101 * K302 - SM2 * K102 * K301;
double Right1 = +K202 * K301 - K201 * K302;

Я думаю decimal не спасет, числа реально очень маленькие.

Всё тоже самое. И вылазит такое маленькое число из-за перемножений кучи косинусов. До аж 6 степени. Блин это же всего лишь треугольник в пространстве... Может оставить тот вариант где было квадратное уравнение SM4 + SM2 + блабла = 0.
Попробовать дискриминант и корни.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NAGIBATOR228pacan 29 мар 2019, 22:24

А как кто-то писал выше в инт или лонг лонг уинт засунуть нельзя? Потом делить просто
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Есть ли способ избежать погрешности переменной float?

Сообщение 1max1 29 мар 2019, 22:30

Подожди еще полвека, когда выйдут суперкомпьютеры, тогда и будешь перемножать свои числа с ювелирной точностью))
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 22:32

1max1 писал(а):Подожди еще полвека, когда выйдут суперкомпьютеры, тогда и будешь перемножать свои числа с ювелирной точностью))

Ждать не нужно. Надо найти способ обойти. Раз система выводит на комплексное решение - значит это война алгебре. Решение в любом случае есть.
Кто нибудь делал вообще гомографию треугольника в пространстве кроме меня? Хоть каким нибудь способом. В интернетах я только дичь какую-то начитал.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NAGIBATOR228pacan 29 мар 2019, 22:45

Сейчас я скорее всего скажу полную херь:
Кароче для повышения точности чтобы не возникало проблем когда что-то на что-то не делится без периода можешь хранить числа не как десятичная дробь как это делается по умолчанию, а как обычная где числитель и знаменатель это инт, а переводишь во флоат только в самом конце вроде это должно решить проблемы с точностью, только надо использовать 64 и 128 битный инт, и то не факт что тебе их хватит
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Есть ли способ избежать погрешности переменной float?

Сообщение NOVA 29 мар 2019, 22:49

NAGIBATOR228pacan писал(а):Сейчас я скорее всего скажу полную херь:
Кароче для повышения точности чтобы не возникало проблем когда что-то на что-то не делится без периода можешь хранить числа не как десятичная дробь как это делается по умолчанию, а как обычная где числитель и знаменатель это инт, а переводишь во флоат только в самом конце вроде это должно решить проблемы с точностью, только надо использовать 64 и 128 битный инт, и то не факт что тебе их хватит

Мысль вроде бы хорошая, только это всё переводить я закончу через 30 лет после пенсиии. Пока что просто посокращаю константы ещё годик. Чёртов Пифагор кто тебя такого придумал.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Пред.След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16