Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 18:23
NOVA
В силу обстоятель чуть ли не по 20 умножений в одном уравнении переменных float потом их сложение и так далее. Как известно одна переменная float даёт погрешность А тут их десятки перемножаются и я не могу понять. Вот это ноль или нет? 1.382136E-05 UnityEngine.Debug:Log(Object) Бывает и так. 1.382136E-012 Может есть какой способ контролировать это? В смысле я к тому, что если это реальный ноль, я выбрасываю из системы одну переменную. Ибо сокращать полсотни косинусов и синусов с комбинациями их степеней можно до пенсии. Умножение всего на миллион решит проблему? Так как объекты решения косинусы углов, которые имеют предел от нуля до единицы.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 18:44
Jarico
Бери 2,3,4 или 5 чисел после запятой... Зачем брать дальше?
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 18:48
NOVA
Да я тоже так думал, но может уравнение именно при этом условии даёт коэффициент A = 0 умноженный на переменную X^8. Это значит, что переменную X^8 можно выкинуть из системы. Но может это работает при этом условии задачи. У условий задач бесконечное множество. Проверить сокращение коэффициента A до нуля можно только практическим способом, ибо гуманитарным придётся целый год сокращать. Так как система уравнений состоит из трёх уравнений четвёртой степени, то решение данного вопроса очень актуально
Re: Есть ли способ избежать погрешности переменной float?
Ой а поподробнее можно пожалуйста. Первый раз вижу. Что конкретно делает функция?
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 19:21
NOVA
Чот про сглаживания прочитал. Вы не понимаете. Надо идеально точные значения. Вот система >>SM^8*KMBC8 + SM^6*KMBC6 + SM^4*KMBC4 + SM2^*KMBC2 = KMBC; >>SM^8*KMAC8 + SM^6*KMAC6 + SM^4*KMAC4 + SM2^*KMAC2 = KMAC; >>SM^8*KMAB8 + SM^6*KMAB6 + SM^4*KMAB4 + SM2^*KMAB2 = KMAB; Где. SM неизвестная переменная. Всё остальное - известные. Что - то в духе.
Это уже сокращённая запись. Дальше никак не сокращается.
Некоторые из этих коэффициентов дают значение приближённое к нулю. От 5 до 12 нулей после запятой. Но это при искуственно - поставленом мною условии. А условий для решения уравнений бесконечное множество. Можно конечно попробовать в условие рандомайзер забить и следить за коэффициентами. Какую - нибудь вершину основания тетраэдра мотать в пространстве и следить за коэффициентами. Но считаю - подход не правильный.
Может я не знаю какой-либо полезной мне теоремы для тетраэдра в пространстве, либо её не существует. Вот например про теорему Лейбница не знал месяц назад. Хорошая она. Но она мне не помогла.
Система хитропопая. Решается попарной подстановкой. И всегда на выходе три уравнения. И когда я выхожу на переменную одно степени - получаю числа приближённые к нулю.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 19:35
1max1
Идеальной точности ты вряд ли добьешься, лучше будет определить что числа меньше определенного == абсолютный ноль.
Но если сильно надо, то смотри в сторону длинной арифметики.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 19:40
NOVA
Ясно. А integer ошибок не даёт? Со значениями под миллиард? Ну запишу я в интегер косинусы помноженные на миллиард. Тогда то точно я всё увижу.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 20:06
1max1
Максимум для uint это 4,294,967,295 смотри чтобы не вылетело за пределы)
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 27 мар 2019, 20:38
NOVA
1max1 писал(а):Максимум для uint это 4,294,967,295 смотри чтобы не вылетело за пределы)
Спасибо. А сами косинусы уже идут с ошибкой блин. Но хотя... Их умножения уже без ошибок пойдут.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 28 мар 2019, 03:32
Woolf
эм.. а double не вариант?
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 28 мар 2019, 16:44
NOVA
Woolf писал(а):эм.. а double не вариант?
Ни разу не пробовал. Чот не нашёл подробной инфы, как этим пользоваться. Понял что производить действия в этом виде нельзя.
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 28 мар 2019, 17:54
seaman
Уберите в Mathf последнюю букву 'f' и обрадуйтесь работой с double!
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 28 мар 2019, 18:26
NOVA
Вы не представляете какие чудеса творит float. было уравнение, где левая часть равна правой. Перенёс одну константу из 20 в правую часть с другим знаком и ошибка аж в семь целых.... А как их (double) объявлять?
Re: Есть ли способ избежать погрешности переменной float?
Добавлено: 28 мар 2019, 18:45
1max1
А как их (double) объявлять?
Ты такие каверзные вопросы задаешь и не знаешь что такое double? Это всё равно что если бы Билл Гейтс спросил как открыть панель управления на винде...