|
|
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Весело у VBA с математикой: ? (12.47 - 12.47 \ 1) * 100 47,0000000000001 ? (12.45 - 12.45 \ 1) * 100 44,9999999999999 Варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 18:25 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
А чего вы хотите? Все правильно. ? (12.47 - 12) * 100 47,0000000000001 ? (12.45 - 12) * 100 44,9999999999999 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 18:38 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
? round((12.47 - 12.47 \ 1) * 100, 12) 47 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 18:39 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
nagoHaK Варианты? Читать книжки об основах вычислений с плавающей точкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 18:40 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Нормальные ошибки при использовании чисел с плавающей точкой. В хорошей книге по VBA обязательно расписан этот момент. Советую как-нибудь прочитать. Чтобы избежать ошибок при выполнении операций вычитания чисел с плавающей точкой, нужно либо сначала округлить числа до требуемого количества десятичных знаков, либо можно воспользоваться подтипом Decimal типа Variant, обеспечивающий высокую точность вычислений. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 08:40 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Deciminal теряет точность. Это раз. Два,так лучше округлять. Три, скорость Varianta в т.ч. Deciminal меньше чем тот же Double. 4) Точность double больше Single. ? (12.47! - 12.47 \ 1) * 100! 47,0000267028809 ? (12.47# - 12.47 \ 1) * 100# 47,0000000000001 ? (12.45! - 12.45 \ 1) * 100! 44,9999809265137 ? (12.45# - 12.45 \ 1) * 100# 44,9999999999999 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 15:32 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Все относительно. Не надо заморачиваться над скоростью Variant, т.к. обращение к полю объекта (К полю рекордсета например) медленнее чем обращение к варианту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 15:38 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Worobjoff, вот уж не уверен... Все операции с Variant происходят через вызовы функций msvbm60.dll Что быстрее будет зависеть от объекта. Если скорость на данном участке кода критична, то лучше сравнить тестом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 16:16 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Сомневаюсь что критично. Да, вариант работает примерно на два порядка медленнее чем double. Но речь идет о наносекундах. А там же "делить", потом "умножить"! А если еще и обращение к полю рекордсета где-то, то эффект от замены варианта на double близок к нулю. Есть более тяжеловесная оптимизация. Исключение лишних срабатываний событий контролов или объектов например. Но мы отклонились от темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 16:29 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Ну а если надо 1** *** *** операций с Double? явно что Variant сделает то же в 2 если не больше раза медленней. Тот же Mid() становится на 20% быстрее, если не получать результат в Variant а потом не переводить в String. (я о Mid$()) Вот и думайте, нужна ли вам скорость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 11:38 |
|
||
|
глюк?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 15:36 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33904003&tid=2165459]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
196ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 534ms |

| 0 / 0 |
