Порядок числа типа Double

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Порядок числа типа Double

Сообщение Faust » 23.06.2004 (Ср) 21:15

Как узнать порядок числа указанного типа красиво? Сейчас делаю так:
Код: Выделить всё
Const NatToDec=Log(10)
Function Poryadok(X As Double) As Integer
Poryadok=CInt(Log(X)/NatToDec)
End Function

Попытался разобраться вот в этом, но не могу понять одну вещь: ведь где-то VB хранит значение порядка скажем, для того, чтобы вывести число на экран.
Листинги не горят!

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

Сообщение alibek » 24.06.2004 (Чт) 9:31

А логарифмом и есть красиво. Можно еще взять Str$(Value) и отсчитывать позиции от символа ".".
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 24.06.2004 (Чт) 9:58

Полностью согласен!
Логарифмом не красиво, а поиск символа ',' вообще зависит от региональных стандартов. Между тем, это значени хранится в каком-то байте числа.
А вот где - это к спецам :arrow: :arrow: :arrow:

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

Сообщение alibek » 24.06.2004 (Чт) 17:41

А почему это логарифмом некрасиво?
А в Str$() разделитель не зависит от региональных настроек, это всегда десятичная точка.

З.Ы. Но если хочешь извращений, то делай CopyMemory в байтовый массив (из четырех или восьми элементов) и смотри биты, отвечающие за порядок.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 24.06.2004 (Чт) 18:18

Из 8 элементов.
Я рылся, но не нашел. И это не извращение, а нахождение результата без использования вычислений. А просто берется уже и так известное значение.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Спасибочки!

Сообщение Faust » 27.06.2004 (Вс) 20:20

alibek писал(а):А логарифмом и есть красиво.

Спасибо. Меня просто интересовало в первую очередь быстродействие функции, а логарифмирование - операция не из самых простых - вот я и подумал: может через структуру формата Double можно получить необходимое значение быстрее. Впрочем, для той задачи, с которой я работаю (оценка погрешности) и двоичный порядок подойдет...
Листинги не горят!

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 27.06.2004 (Вс) 21:36

есть ещё один метод, правда он более медленный, но иногда может пригодиться, когда нету функции логарифмирования :)

итак, всё очень просто: в цикле переменная делиться на 10 до тех пор, пока не станет меньше 1, порядок - количество повторений в цикле...

ну это так, вдруг кому пригодиться...

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

Сообщение Mikle » 28.06.2004 (Пн) 10:40

Можно вместо деления на 10 умножать на 0.1# - так быстрее.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 16

    TopList