Оптимизация "Allow Unrounded Floating Point Operations&

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.08.2005 (Пт) 15:45

Andrey Fedorov, ты фишку не понял :)
Это круто даже не тем, что возвращает Null, а тем, что второй параметр (какой мембер тебе нужно получить) является смещением по структуре.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.08.2005 (Пт) 15:48

Угу, это главная фишка :)

И если возвращать Variant, то придётся в каждой связанной проперти проверять, была возвращена структура или Null. А у меня всё без проверок.

И это не получение системного времени. Это возвращение даты, которую пользователь выбрал в DTPicker'е. Могли бы и догадаться по префиксу DTM :) MSDN, опять же :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2005 (Пт) 15:54

alibek писал(а):Andrey Fedorov, ты фишку не понял :)
Это круто даже не тем, что возвращает Null, а тем, что второй параметр (какой мембер тебе нужно получить) является смещением по структуре.


Да понял я - первый параметр ссылка на структуру, второй параметр - ссылка (а не смещение!) на ее члена - тут все как обычно. Но в конкретном случае это лишнее ибо все можно решить гораздо проще. А где такое может реально пригодиться - пока сходу не соображу - может и может где-то...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 12.08.2005 (Пт) 15:57

GSerg писал(а):ибо нельзя вернуть Null

Правильно! Так проверяем на нулл, а так проверяем на валидность значений полей структуры, что более трудоемко.

Andrey Fedorov мы разбираем принцип использования, а не это конкретное применение этого принципа.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.08.2005 (Пт) 15:57

Andrey Fedorov писал(а):Да понял я - первый параметр ссылка на структуру, второй параметр - ссылка (а не смещение!) на ее члена - тут все как обычно. Но в конкретном случае это лишнее ибо все можно решить гораздо проще. А где такое может реально пригодиться - пока сходу не соображу - может и может где-то...

Неа :)
Второй параметр -- таки смещение :)
А где практически можно применить и я не пойму, но выглядит круто :)
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.08.2005 (Пт) 15:58

Andrey Fedorov писал(а):Но в конкретном случае это лишнее

Вот ты ж блин...

Напиши код, который один в один делает то, что делает мой, но без этого приёма.
Это возможно, я знаю. Я хочу посмотреть, как будет выглядеть этот код.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2005 (Пт) 16:11

GSerg писал(а):Напиши код, который один в один делает то, что делает мой, но без этого приёма.
Это возможно, я знаю. Я хочу посмотреть, как будет выглядеть этот код.


Примерно так:

Код: Выделить всё

Private Type VSYSTEMTIME
    wYear As Variant
    wMonth As Variant
    wDayOfWeek As Variant
    wDay As Variant
    wHour As Variant
    wMinute As Variant
    wSecond As Variant
    wMilliseconds As Variant
End Type

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Public Property Get Hour() As Variant
    Hour = GetDatePart.wHour
End Property

Public Property Get Minute() As Variant
    Minute = GetDatePart.wMinute
End Property

Private Function GetDatePart() As VSYSTEMTIME
    Dim t As SYSTEMTIME, tv As VSYSTEMTIME

    If SendMessage(h, DTM_GETSYSTEMTIME, 0, t) = GDT_VALID Then
        tv.wMinute = t.wMinute
        tv.wHour = t.wHour
        ' ...
    Else
        tv.wMinute = Null
        tv.wHour = Null
        ' ...
    End If
    GetDatePart = tv
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.08.2005 (Пт) 16:19

Угу.
VARIANT-структура, да ещё и копирование всех её элементов, когда нужен только один...

Не круто :ncool:
Именно этого я пытался избежать :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2005 (Пт) 16:20

alibek писал(а):Неа :)
Второй параметр -- таки смещение :)


Обычная ссылка на переменную. Пускай эта переменная и член структуры. Чего ради называть ее смещением в отличии от остальных переменных?

Под смещением все-же понимается несколько другое...

А тут функции передается ссылка на структуру и ссылка на переменную этой-же структуры значение которой нужно вернуть. Все логично.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 12.08.2005 (Пт) 16:49

Почему другое? Это именно смещение от начала размещения структуры в памяти
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.08.2005 (Пт) 17:00

Рискну напомнить с чего началось. Этот код разве не работает, будучи скомпилированным с оптимизацией "Assume no Aliasing"?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.08.2005 (Пн) 7:49

Igor_123 писал(а):Почему другое? Это именно смещение от начала размещения структуры в памяти


Начало структуры тут не причем. Оба параметра передаются как ссылки на переменные. И только - никакого смещения от начала структуры нет и в помине.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2005 (Пн) 9:44

Да нет же.
В UDT переменные-мемберы существуют только для удобства разработчика. В скомпилированном коде нет никаких переменных, есть только смещение в структуре.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.08.2005 (Пн) 9:48

alibek писал(а):Да нет же.
В UDT переменные-мемберы существуют только для удобства разработчика. В скомпилированном коде нет никаких переменных, есть только смещение в структуре.


А просто вывести varptr для второго параметра и посмотреть что это - смещение или указатель?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2005 (Пн) 9:56

Сделал. Как и ожидал, смещения различаются на длину мембера. Причем VarPtr(udt.first_member) совпадает с VarPtr(udt).
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.08.2005 (Пн) 10:16

alibek писал(а):Сделал. Как и ожидал, смещения различаются на длину мембера. Причем VarPtr(udt.first_member) совпадает с VarPtr(udt).


Дык это и указывает что это не смещения, а указатель!
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.08.2005 (Пн) 10:17

alibek писал(а):Сделал. Как и ожидал, смещения различаются на длину мембера. Причем VarPtr(udt.first_member) совпадает с VarPtr(udt).


Дык это и указывает что это не смещения, а указатель!
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2005 (Пн) 10:28

А по-моему наоборот, просто компилятор корректирует вызовы VarPtr для структур. Иначе как объяснить, что вся структура и первый мембер структуры имеют один адрес?
Lasciate ogni speranza, voi ch'entrate.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 15.08.2005 (Пн) 10:37

А смещение, не есть указатель?
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 15.08.2005 (Пн) 10:42

alibek в смысле корректирует?
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.08.2005 (Пн) 11:17

В смысле, заменяет VarPtr(udt.member) на VarPtr(udt)+Len(udt.Member).
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.08.2005 (Пн) 11:25

alibek писал(а):В смысле, заменяет VarPtr(udt.member) на VarPtr(udt)+Len(udt.Member).


и на что это будет указывать?
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.08.2005 (Пн) 11:30

Господа...

Смею заверить вас, что указатель и смещение - вещи совершенно в некотором роде одинаковые, ибо указатель суть смещение от нуля.
Смею сказать также, что приведённый мною пример кода я считаю просто красивым и уже потому любопытным. Для меня не играет существенной роли его авторство, и будь он предъявлен Алибеком либо Тёмычем, менее красивым я его не считал бы.

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.08.2005 (Вт) 7:47

alibek писал(а):А по-моему наоборот, просто компилятор корректирует вызовы VarPtr для структур. Иначе как объяснить, что вся структура и первый мембер структуры имеют один адрес?


Только тем что то и другое указатели. Что и говорилось - с чего это им быть смещениями от начала структуры? Где в MSDN прописано что для члена структуры передается его смещение от ее начала?

Ну и в приведенном примере передается указатель на структуру, которую нужно заполнить и указатель на переменную (пусть она и член структуры), значение которой нужно вернуть. Тут все верно и будет работать.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Пред.

Вернуться в Visual Basic 1–6

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

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

    TopList