Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Увеличить точность вычислений
 
 автор: Eugene77   (16.05.2008 в 19:41)   письмо автору
 
 

Неожиданно попал в полный ступор!
Не хватает точности вычислений по формуле, а в gimp нет функции синуса.
Что делать?

   
 
 автор: Trianon   (16.05.2008 в 19:54)   письмо автору
 
   для: Eugene77   (16.05.2008 в 19:41)
 

что за формула-то?
и каким боком тут gimp?

   
 
 автор: Eugene77   (17.05.2008 в 05:38)   письмо автору
 
   для: Trianon   (16.05.2008 в 19:54)
 

Да, разумеется, не gimp, а gmp.

А про формулу я даже не знаю что сказать. Она мне рисует замысловатую линию.
Я её испытал на другом языке программирования - работает нормально.
Теперь никак не могу её перенести в PHP.
Проблема возникает от того, что формула содержит разности примерно одинаковых чисел.
Слишком грубое округление в PHP приводит к появлению ступенек на линии, которая должна идти плавно.
Преобразовать эту формулу так чтобы исключить из неё эти разности методами алгебры нельзя.

   
 
 автор: Eugene77   (19.05.2008 в 13:03)   письмо автору
 
   для: Trianon   (16.05.2008 в 19:54)
 

Судя по обилию рекомендаций я понял, что надо писать программу на другом языке, компилироать её, потом запускать её через exec.
Или может быть, есть какой-то метод подключить к PHP библиотеки СИ?
Может ещё идея какая-то есть?

   
 
 автор: cheops   (19.05.2008 в 14:28)   письмо автору
 
   для: Eugene77   (19.05.2008 в 13:03)
 

>Или может быть, есть какой-то метод подключить к PHP библиотеки СИ?
Можно написать расширение.

   
 
 автор: Eugene77   (20.05.2008 в 15:16)   письмо автору
 
   для: cheops   (19.05.2008 в 14:28)
 

>>Или может быть, есть какой-то метод подключить к PHP библиотеки СИ?
>Можно написать расширение.

Как это сделать? Я знаю что должна делать моя программа, но как её проще всего приделать к PHP?

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

Но расширение - это наверно что-то другое? Меня с ним на хостинг пустят?
Если мне делать в Linux - среде, то придётся перекомпилировать PHP интерпретатор?
Под windjws надо делать свой DLL? Как его делают?

   
 
 автор: mihdan   (20.05.2008 в 23:07)   письмо автору
 
   для: Eugene77   (20.05.2008 в 15:16)
 

Для начала опишите полностью задачу, возможно будет все сделать проще чем вам кажется и на РНР. Может вы просто что-то недопоняли

   
 
 автор: Eugene77   (21.05.2008 в 11:10)   письмо автору
 
   для: mihdan   (20.05.2008 в 23:07)
 

Почти нечего описывать.
Есть формула, содержащая тригонометрические функции, надо постоить её график.
Формула не очень простая и из-за разностей больших чисел начинают получаться ступеньки на графике, где должно идти плавно.
Вот уже неделю вокруг неё хожу. На другом языке записал - всё работает нормально, но мне надо на PHP.

   
 
 автор: cheops   (21.05.2008 в 11:48)   письмо автору
 
   для: Eugene77   (21.05.2008 в 11:10)
 

У PHP только две функции expm1() и log1p(), которые высчитывают значения повышенной точности и только под UNIX в Windows они используют обычные функции.

   
 
 автор: Eugene77   (22.05.2008 в 18:12)   письмо автору
 
   для: cheops   (21.05.2008 в 11:48)
 

>У PHP только две функции expm1() и log1p(), которые высчитывают значения повышенной точности и только под UNIX в Windows они используют обычные функции.

Даже эти функции возвращают float. А разности между float - это уже источник значительных погрешностей, если точки на графике находятся близко.
Если я правильно помню, в Cи все математические функции по умолчанию возвращают double.
Вроде бы PHP на Си написан, как же они изменили этот разумный подход?
Может быть возможно как-то вернуть изначальное положение вещей?

   
 
 автор: cheops   (22.05.2008 в 19:42)   письмо автору
 
   для: Eugene77   (22.05.2008 в 18:12)
 

Вообще-то возвращается double, однако в конфигурационный файл php.ini сейчас введена директива
precision    =  12

которая указывает, сколько знаков после запятой должно отображаться в вещественном числе - может у вас с этим что-то связанно, попробуйте поиграться этой директивой (хотя она не должна на вычисления влиять - её дело формат вывода). Ошибки накапливаются действительно быстро, для этого и введены функции expm1() и log1p() - они очень точно считают свой класс задач.

   
 
 автор: Trianon   (23.05.2008 в 01:01)   письмо автору
 
   для: Eugene77   (22.05.2008 в 18:12)
 

вообще-то float в С и float в php - две разные вещи.

   
 
 автор: cheops   (21.05.2008 в 11:51)   письмо автору
 
   для: Eugene77   (20.05.2008 в 15:16)
 

>>>Или может быть, есть какой-то метод подключить к PHP библиотеки СИ?
>>Можно написать расширение.
>
>Как это сделать? Я знаю что должна делать моя программа, но как её проще всего приделать к PHP?
>
>У меня мысль такая: PHP скрипт пишет во временную директорию файлы. Программа - расширение читает их и перерабатывает, а потом записывает в другие файлы результат. Потом из этих файлов снова читает PHP скрипт и выводит уже окончательный результат.
>
>Но расширение - это наверно что-то другое? Меня с ним на хостинг пустят?
>Если мне делать в Linux - среде, то придётся перекомпилировать PHP интерпретатор?
>Под windjws надо делать свой DLL? Как его делают?
Маловероятно, что вас на хостинг с ней пустят, зависит от хостинга, если там допускается использоваться CGI-скрипты, написанные на C - можно с помощью их что-то сделать.

   
 
 автор: Eugene77   (22.05.2008 в 17:32)   письмо автору
 
   для: cheops   (21.05.2008 в 11:51)
 

Я давно уже не писал на Си чего-то реально работающего.
Какой мне надо компилятор: стандартный линуксовский или микрософтовский подойдёт?

   
 
 автор: cheops   (22.05.2008 в 19:44)   письмо автору
 
   для: Eugene77   (22.05.2008 в 17:32)
 

В Linux нужен будет GCC, в Windows - Visual Studio С++.

   
 
 автор: Eugene77   (23.05.2008 в 20:48)   письмо автору
 
   для: cheops   (22.05.2008 в 19:44)
 

Спасибо! Яснот еперь.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования