Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
[Info] Почему стоит писать 2.0 вместо 2
Доказывая людям из соседней темы то, что вар не делает никакой прекалькуляции, я привел в пример дизассембленный код функции. Адольф заметил там интересную вещь, которую я тут же проверил и спешу теперь поделиться с общественностью.
Разбору подлежала следующая простенькая функция:
что после дизассемблера вылилось в такой псевдокод:
Адольф Обратил моё внимание на странные действия
из чего следовало что "2" воспринимается варом как целое число, а только потом преобразовывает в число с плавающей запятой.
Чтобы проверить догадку, было внесено маленькое изменение в исходный код:
и вуаля, всё как и ожидалось:
а конкретнее вот:
двойка сразу передалось как число с плавающей запятой
Отсюда вывод:Значения с плавающей точкой стоит записывать с точкой даже если дробная часть нулевая (1.0 или 1. против 1)! Тем самым мы экономим виртуальной машине игры одну операцию приведения типов =) |
07.10.2009, 00:06 | #1
+12/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
+rep
кстате я всегда ставил 2. из соображений порядка - оказалась правильно) |
07.10.2009, 00:11 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
эээ не понял вы удивлены что вар читает целое число как целое? о_О ага я тож |
07.10.2009, 00:11 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
agentex, считать надо в real'е, а "2" число целое, и вар преобразует его сначало в реал и потом считает. =) |
07.10.2009, 08:02 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
ну в целом это логично как бы =) просто теперь вопрос скока требует перевод инта в флоат. (тактов процессора или чего либо =) ) |
07.10.2009, 11:14 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
это я думаю к кроку вопрос. хотя можно и самим попробывать найти обработчик опкода)
но мне кажется что это (и обратное преобразование) должно быть быстрее, чем вызов нативки |
07.10.2009, 11:25 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
r*bj_PI*2 что-то меняет? |
07.10.2009, 12:02 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
Работа с интом гораздо быстей чем с флоатом, хотя здесь это не имеет значения..
че у вас за дизассемблер такой? это на асм то не похоже |
07.10.2009, 12:51 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
нет. Всё так же берётся инт и преобразуется в флоат |
07.10.2009, 13:57 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
а в чем проблема? все логично же вы хотите сказать что если написать set i = 2 + 2 вар все равно переведет все слагаемые в риал а потом будет считать? |
07.10.2009, 14:09 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
agentex, я имел ввиду если берётся реал и инт, то инт переводится в реал и считает... |
07.10.2009, 14:20 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
а что есть другие варианты?? это же очевидно.. |
07.10.2009, 14:23 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
это ниразу не очевидно, можно анализировать тип выражения и сразу считать цифры в формате без точки как реалы (как в принципе делают многие компиляторы) |
07.10.2009, 14:46 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FREEZE_ball
Cataclysm => жара
offline
Опыт:
15,247Активность: |
Код:
|
07.10.2009, 15:27 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
iZucken
ШТО
offline
Опыт:
17,960Активность: |
FREEZE_ball, хD ScorpioT1000: а на сколько? хотя, лучше так: во сколько? |
07.10.2009, 16:02 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
|
07.10.2009, 16:10 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Enein
Silenced by ZlaYa1000
offline
Опыт:
43,583Активность: |
|
07.10.2009, 16:21 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
любой из трёх вариантов Van Damm добавил: хотя насчёт первого я не уверен =) |
07.10.2009, 16:25 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,699Активность: |
это вроде ещё из си -неформальное преобразование...
|
07.10.2009, 16:58 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
Elf_Stratigo, неявное приведение =) |
07.10.2009, 20:39 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|