169 похожих чатов

Доброго времени! Есть ли в Lazarus заклинания повышающие точность double? function

Distance( constref pt0,pt1:TDVec2 ):double;
var cp,st:TDVec2;
sin_sr1,sin_sr2,
cos_sr1,cos_sr2,v:double;
begin
cp := radians( pt0 );
st := radians( pt1 );

sin_sr1 := sin( st.lat );
sin_sr2 := sin( cp.lat );
cos_sr1 := cos( st.lat );
cos_sr2 := cos( cp.lat );

v := clamp( sin_sr1*sin_sr2 + cos_sr1*cos_sr2 * cos( st.lng-cp.lng ), 0.0, 1.0 );
Result := Rearth*arccos( v );
end;
Тоже самое я реализовал на OpenCL и выяснил что OpenCL считает чуть точнее:
distCPU[4] = 0.0000949369370937348
distCPU[5] = 0.0000949369370937348
distCPU[6] = 0.00018987387418747
distCPU[7] = 0.00018987387418747
distCPU[8] = 0.000232547053622355
distCPU[9] = 0.000232547053622355
distCPU[10] = 0.000268522208016242
distCPU[11] = 0.000268522208016242

distCL[4] = 0.0000949369370937347
distCL[5] = 0.000134261104008121
distCL[6] = 0.000164435598561319
distCL[7] = 0.000189873874187469
distCL[8] = 0.000212285444917212
distCL[9] = 0.000251179525784205
distCL[10] = 0.000284810811281204
distCL[11] = 0.000300216955296328

4 ответов

81 просмотр

double считает процессор. ему пофиг какой язык. а вот тот же синус это библиотечная функция и может иметь разную точность.

Александр-Смоляков Автор вопроса
Boris Usievich
double считает процессор. ему пофиг какой язык. а ...

Что можно сделать чтобы посчитать sin/cos/arcos максимально точно?

Если нужно считать расстояния между атомами в разных галактиках, то лучше использовать не Double, а что-то из библиотек для математиков. У Double не десятичная плавающаа точка, а двоичная, поэтому арифметика сильно хромает.

Тут ещё можно sin+cos заменить на math.sincos Будет немного быстрее (на сколько - не знаю)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта