Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вычитание чисел с плавающей точкой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dcweb
Отправлено: 06 Февраля, 2014 - 20:54:50
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Есть цикл, в нём код:

PHP:
скопировать код в буфер обмена
  1. $start = microtime(true);
  2. $sql->query($query);
  3. $end = microtime(true);
  4.    
  5. $time = $end - $start;


Почему-то я получаю такие результаты

CODE (htmlphp):
скопировать код в буфер обмена
  1.     ["end"]=>
  2.     float(1391712814.2786)
  3.     ["start"]=>
  4.     float(1391712814.2781)
  5.     ["time"]=>
  6.     float(0.00055503845214844)
  7.  
  8.     ["end"]=>
  9.     float(1391712814.2789)
  10.     ["start"]=>
  11.     float(1391712814.2789)
  12.     ["time"]=>
  13.     float(5.6028366088867E-5)
  14.  
  15.     ["end"]=>
  16.     float(1391712814.2791)
  17.     ["start"]=>
  18.     float(1391712814.2791)
  19.     ["time"]=>
  20.     float(4.5061111450195E-5)


Как с этим правильно работать?

(Отредактировано автором: 06 Февраля, 2014 - 20:55:46)

 
 Top
KingStar
Отправлено: 06 Февраля, 2014 - 21:23:56
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)






-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 06 Февраля, 2014 - 21:27:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А в чём вопрос-то?


-----
PostgreSQL DBA
 
 Top
dcweb
Отправлено: 06 Февраля, 2014 - 22:05:31
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Мелкий
ну для 2 результата

CODE (htmlphp):
скопировать код в буфер обмена
  1. ["end"]=>
  2.     float(1391712814.2789)
  3.     ["start"]=>
  4.     float(1391712814.2789)
  5.     ["time"]=>
  6.     float(5.6028366088867E-5)

time = end - start
time = 1391712814.2789 - 1391712814.2789

Я получил 5.6028366088867E-5, вместо 0. Как бы это исправить?
 
 Top
Мелкий Супермодератор
Отправлено: 07 Февраля, 2014 - 08:38:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Округлите значение до требуемой вам точности.
Это float. Я не понимаю, в чём проблема.


-----
PostgreSQL DBA
 
 Top
eai
Отправлено: 07 Февраля, 2014 - 08:46:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. echo(1391712814.2789 - 1391712814.2789);
  3.  

>>0

У меня так
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 10:22:09
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




eai, у меня цикл в 300 проходов

Мелкий, сделал

теперь получаю
CODE (htmlphp):
скопировать код в буфер обмена
  1.   [0]=>
  2.   array(3) {
  3.     ["end"]=>
  4.     float(1391761200.9126)
  5.     ["start"]=>
  6.     float(1391761200.9124)
  7.     ["time"]=>
  8.     float(0.0002)
  9.   }

тут вроде всё хорошо, но дальше
CODE (htmlphp):
скопировать код в буфер обмена
  1.   [6]=>
  2.   array(3) {
  3.     ["end"]=>
  4.     float(1391761200.9134)
  5.     ["start"]=>
  6.     float(1391761200.9134)
  7.     ["time"]=>
  8.     float(0)
  9.   }
  10.   [7]=>
  11.   array(3) {
  12.     ["end"]=>
  13.     float(1391761200.9135)
  14.     ["start"]=>
  15.     float(1391761200.9134)
  16.     ["time"]=>
  17.     float(0)
  18.   }

1391761200.9135 - 1391761200.9134 получился 0
 
 Top
Мелкий Супермодератор
Отправлено: 07 Февраля, 2014 - 10:47:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Допишем ещё парочку возможных знаков:
Цитата:
array(3) {
["end"]=>
float(1391761200.913501325)
["start"]=>
float(1391761200.913498764)
["time"]=>
float(0)
}

Почему бы и нет? Вполне правдоподобно.


-----
PostgreSQL DBA
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 11:15:49
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Мелкий, мне нужны более точные значения. Подошел бы ceil, но там нельзя указать precision.
 
 Top
IllusionMH
Отправлено: 07 Февраля, 2014 - 11:19:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




dcweb, так умножить и разделить на нужный порядок?
Хотя непонятно почему-то пару постов назад
dcweb пишет:
Я получил 5.6028366088867E-5, вместо 0. Как бы это исправить?

точность мешала.
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 11:21:40
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




я хочу при 1391761200.9135 - 1391761200.9134 получать 0.0001, как мне это сделать?
 
 Top
IllusionMH
Отправлено: 07 Февраля, 2014 - 11:42:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




dcweb, если только при выводе - printf. Иначе я уже писал выше как делать. Еще полезно заглядывать в комментарии к функциям на оф сайте (ceil), там много полезной инфы.

(Отредактировано автором: 07 Февраля, 2014 - 11:44:28)

 
 Top
eai
Отправлено: 07 Февраля, 2014 - 11:58:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




dcweb пишет:
я хочу при 1391761200.9135 - 1391761200.9134 получать 0.0001, как мне это сделать?


Для зело точных вычислений есть специальные библиотеки
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB