Mikle писал(а):Ты кликни и подожди 3-5 минут, не трогай. Или уменьши k1, чтобы меньше ждать.
k1 = 0.99
k2 = 0.01
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
ArIn(CLng(x) + CLng(y) * 256).P = 1E-36
End Sub
Mikle писал(а):Замени процедуру MouseDown на такую
Qwertiy писал(а): деление на 0 в double работает гораздо медленнее
Mikle писал(а):Qwertiy писал(а): деление на 0 в double работает гораздо медленнее
Где там деление на 0?
Где там вообще деление?
Mikle писал(а):Вот я сделал чистый тест без лишней графики, нажимаем:
0 - рассчёты с нулями,
1 - рассчёты с малыми величинами
OllyDgb inside help писал(а):DE - Denormalized Operand: set if an operand of the FPU arithmetic instruction is
denormalized, or if FPU loads denormalized data from memory. This flag is sticky: once
set, it remains set until explicitly cleared;
UE - Underflow: set if the result of the arithmetic operation is less than the smallest
possible normalized value that fits into the destination. This flag is sticky: once
set, it remains set until explicitly cleared;
PE - Precision: set if the result of the arithmetic operation is not exactly
representable in the destination. For example, 1.0/3.0 will trigger precision
exception. This flag is sticky: once set, it remains set until explicitly cleared;
Intel Manual писал(а):Denormal Numbers
A normalized number is a number for which both the exponent (including offset) and the most significant bit of the mantissa are non-zero. For such numbers, all the bits of the mantissa contribute to the precision of the representation.
The smallest normalized single precision floating-point number greater than zero is about 1.1754943-38. Smaller numbers are possible, but those numbers must be represented with a zero exponent and a mantissa whose leading bit(s) are zero, which leads to a loss of precision. These numbers are called denormalized numbers; denormals (newer specifications refer to these as subnormal numbers).
Denormal computations use both hardware or operating system resources to handle them, which can cost hundreds of clock cycles.
• Denormal computations take much longer to calculate on IA-32 and Intel® 64 processors than normal computations.
• Denormals are computed in software on processors based on the IA-64 architecture, and the computation usually requires hundreds of clock cycles, which results in excessive kernel time.
There are several ways to handle denormals and increase the performance of your application:
• Scale the values into the normalized range.
• Use a higher precision data type with a larger dynamic range.
• Flush denormals to zero.
Flush denormals to zero.
FireFenix писал(а):А вот как это реализовать на VB6, думаю нужно спросить у Хакера, ну может есть штатные средства
А можно и нам увидеть эти варианты, или хотя-бы один из них, через призму твоего видения этого дела? Очень интересноХакер писал(а):Я, как обычно, вижу не один, а большое множество вариантов, как это можно реализовать.
Хакер писал(а): некоторая «невидимая магия» заменяет FPU-вычисления на SSE-вычисления
Хакер писал(а):что-то вроде объектно-основанного подхода, где в центре стоял бы объект «выражения». К выражению можно было бы применить действие «вычислить». Где выражения можно было бы комбинировать, и менеджер выражений автоматически разруливал композиции, выдавая объекты-композиты
c = a + b
Set oExpr = new CExpressionObject ' где-то в начале, при инициализации программы.
oExpr.InitalizeFromNormalString "a + b" ' Где-то в начале, при инициализации программы
...
oExpr.IntroduceVar "a", f_var_A
oExpr.IntroduceVar "b", f_var_B
...
f_var_C = oExpr.Compute() ' Когда надо вычислить
Help OllyDbg писал(а):RC - Rounding control: controls the rounding of the imprecise results of the
floating-point operations:
+----+------------------------------+
| 00 | Round to the nearest |
+----+------------------------------+
| 01 | Round down (towards -INF) |
+----+------------------------------+
| 10 | Round up (towards +INF) |
+----+------------------------------+
| 11 | Round towards zero |
+----+------------------------------+
Help OllyDbg писал(а):IC - Infinity control: dummy flag, provided for the compatibility with the 80287
coprocessor.
Хакер писал(а):Как тебе варианты?
Хакер писал(а):Менеджер выражений создаст новый объект-выражение 4.95*x/(g*(f+c*y)), сократив множетель «а».
Mikle писал(а):1. Практически нереально сделать (дизассемблировать готовый EXE, заменить FPU на SSE, не нарушая логики), не спасает при отладке, при отладке и в рантайме результаты могут разойтись.
Mikle писал(а):2. То есть программа будет компилироваться дважды, один раз - когда мы компилим в среде, второй раз - когда мы запускаем EXE докомпилируются объекты CExpressionObject?
Mikle писал(а):А каким компилятором они будут компилироваться? Своим? В принципе - написать компилятор для математических выражений, это более реально, чем для полных программ, мысль очень интересная.
Хакер писал(а):Затем элементам RPN-записи практически один в один сопоставляются инструкции SSE. По крайней мере, так обстояли дела с FPU.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3