Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Герои Меча и Магии 3Вы посмотрите машинное представление числа 0.9 с максимальной точностью. Точность double меньше точности FPU-регистров, а все вычисления с плавающей точкой проходят с их участием. Думаю, 0.9 double превращается во что-то вроде 0.90000...xxx.
|
Re: Герои Меча и Магии 30.45 заведомо превращается в то же самое, просто с меньшей степенью двойки, но не даёт гремлину 14 из 13,5.
Вот представления double
Как посмотреть что-то более точное, я не знаю. |
Re: Герои Меча и Магии 3Размер числа в регистре FPU - 80 бит, числа double - 8 байт - только 64 бита. Вполне возможно, что 0.9 отсекается с последней единичкой и получается больше, а 0.45 - с последним нулём и получается меньше.
Да, а ещё коэффициенты для Гильдии Наёмников не double, а float: 0.30000001, 0.44999999, 0.5, 0.64999998, 0.69999999, 0.85000002, 0.89999998, 1.0 Для Алебардщиков (75 золотых): 3.3749999105930328369e1 => 34, 6.7499998211860656738e1 => 68. |
Re: Герои Меча и Магии 3Короче, выяснил я что к чему здесь. Действительно, дело в машинных погрешностях. Но если бы только в них, то при 5 рынках Алебардщик стоил бы 53 золота, а не 52. Оказывается, что игра очень интересно считает стоимость в ресурсах:
1 рынок: 1. 75 * k = 2.2500000894069671631e1 => (float) => 22.5f; 2. 1 / 22.5f = 0.0444444f; 3. floor(1 / 0.0444444f + 0.5) = floor(2.2999999455176308061e1) = 22 (!) 7 рынков: 1. 75 * k = 6.7499998211860656738e1 => (float) = 67.5f; 2. 1 / 67.5f = 0.0148148f; 3. floor(1 / 0.0148148f + 0.5) = floor(6.8000001194421216155e1) = 68 (!) Как видим, здесь 2 операции 1/x, что и объясняет все эти странности. 1/x нужно для вычисления стоимости ресурсов в золоте. И две таких операции дают ощутимую погрешность. |
Re: Герои Меча и Магии 3Двойное взятие обратной величины!
Мама-дорогая! Нет, сами 0.45 и 0.9 не могут отсекаться по-разному, поскольку отличаются ровно в два раза. Поэтому и удивился. Теперь всё ясно. Само итоговое округление, как я и предполагал, идёт по математическим правилам. В торговле Героев 3 оно используется несколько раз. AlexSpl писал(а): 1. 75 * k = 2.2500000894069671631e1 => (float) => 22.5f; ... 7 рынков: 1. 75 * k = 6.7499998211860656738e1 => (float) = 67.5f; ... Вот эти значения я изначально проверил во float и double. Они получились точными несмотря на погрешности в самих k. |
|
Re: Герои Меча и Магии 3Вопрос.
У некоторых юнитов,есть абилки,которые считаются заклинаниями(огнещит ифритов,например). Можете объяснить природу всех абилок юнитов и почему,они так работают? |
Re: Герои Меча и Магии 3Технически все абилки есть заклинания. Лучше назвать совокупность заклинаний и абилок эффектами. В группу эффектов входят также Мораль и Удача. Любой эффект можно превратить в заклинание или абилку (см. плагин NewSpells, например). Чёткой границы между ними нет. Кроме того, многие эффекты уникальны, так что о каждом нужно читать отдельно (например, в FizMiG'е или у нас на сайте).
|
|
Re: Герои Меча и Магии 3AlexSpl писал(а): А ссыдочку на сайт не кинете? |
|
Re: Герои Меча и Магии 3Мне через полгода ответил Грэг Фултон и, к сожалению, даже он не может попросить бету у того поца:
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6