|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 16, 2003 16:21:11 По скорости должен быть выйгрышь!! Но правильность написания нужно соблюдать!!! |
|
|
Дата: Июл 16, 2003 16:55:24 Как сделать чтобы результат был одинаковым на С и на Асме? Посмотри, что у сишной программы в FPU control word перед началом вычислений. И поставь у себя то же самое. Или в сишной программе перед самыми вычислениями вставь FNINIT. А вообще, грабли старые. Особенно обидно, когда очень точно подберёшь какой-нибудь коэффициент на си, а на асме оно необъяснимо глючит... |
|
|
Дата: Июл 16, 2003 16:58:17 А вообще, грабли старые. Особенно обидно, когда очень точно подберёшь какой-нибудь коэффициент на си, а на асме оно необъяснимо глючит... Это вы про что? |
|
|
Дата: Июл 16, 2003 17:07:23 FPU control word [i][/i] Жто ты имеешь в виду биты которые отвечают за округление???? Я правильно понял? |
|
|
Дата: Июл 17, 2003 04:07:45 |
|
|
Дата: Июл 17, 2003 14:51:40 2 Edmond: Дело в том, что сишный рантайм (во всяком случае, у нескольких компиляторов) инициализирует арифметический сопроцессор заданными значениями, а не дефолтными, как это обычно делают в программах на ассемблере. К примеру, Ватком использует следующие значения: Infinity Control - affine, Rounding Control - near, Precision Control - 53 bits, Interrupt Exception Masks - invalid | denormal | zero divide | overflow | underflow | inexact result. В результате этого наблюдается различие в результатах одинаковых вычислений, вплоть до одной и той же сишной программы и выдранного из неё же куска кода. Поскольку различия касаются в основном точности и округления, разница, как правило, бывает невелика и в подавляющем большинстве применений незаметна. Исключение составляют тщательно подобранные коэффициенты, которые зачастую, чтобы не переделывать всё остальное, приходится подбирать заново. Одним из методов борьбы с этим можно считать временную установку в FPU control word значения, соответствующего применяемому используемым компилятором. 2 emergenter : Я имею в виду все биты, кроме, пожалуй, Exception Masks. Проще уж действительно все. ;) |
|
|
Дата: Июл 17, 2003 16:31:15 bsl_zcs Ясно. Я как раз недавно прочитал об этом. :) |
|
|
Дата: Июл 17, 2003 16:33:26 Встречный вопрос. У меня давняя проблема. Что вы знаете об алгоритме перевода 80-bits числа из строки и обратно в майкрософтовских прогах. Например тот же MASM |
|
|
Дата: Июл 31, 2003 17:38:12 Блин!! И что делать с этой точностью !! Все доки облазил!!! А вот должно же как то делаться! Код на Си не просто так же делает эту точность!!! ??? Кто нибудь вообще работал с вещественными числами? |
|
|
Дата: Июл 31, 2003 18:37:07 Ну чего тебе непонятно? Поставь в сишной программе перед вычислениями __asm { fninit } или как там у твоего компилятора это делается... А вообще, не доки надо смотреть, а исходники rtl. Чего там в доках-то описывать? |
|
|
Дата: Июл 31, 2003 19:28:10 тут не то!!! А откуда ты знаешь что компилятор использует именно СОПРОЦЕССОР для обработки вещественных чисел!!!! Я проанализировал и после многочисленных часов добился того что!!! Допустим есть в массиве float 4 числа (вещественные) например: 1)14.62 2)90.239998 3)171.820007 4)256.639984 ну и получается после сложания каким то боком 533.320007 Я помучался и обнаружил!!! что когда я засылаю в 4 регистра xmm1, xmm2, xmm3, xmm4 по одному числу в младшия 32 бита а потом все складываю поочередно получается именно такое число 533.320007. А когда использую цикл где числа поочередно звписываются в один регистр xmm и складываются к другому регистру xmm2 то получается 533.319946!!! Что очень странно!! Но нужно именно 1 число!!!! Также дела обстоят и с сопроцессором если в цикле то 533.319946 а если загрузить поочередно в стек сопроцессора а потом сложить в st0 то первое число 533.320007. Блин!! Что делать!! Нужно число 533.320007 а хочется с циклом работать!! И вообще что тут происходит! Кто мне объяснит!!! |
|
|
Дата: Июл 31, 2003 19:29:59 Пробывал даже подгружать регистр состояния/управления MXCSR!! Не помогло!! Хотя бы были какие нибудь биты которые могли эту картину исправить!! Вот ничего и нет кроме округления!!! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.060 |