Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Ребята, растолкуйте что к чему нужно привести, что бы ноль получился: Код: php 1. 2. 3. 4. дает такой результат -8.8817841970013E-16 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 23:56 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
http://php.net/manual/ru/language.types.float.php Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции. Там же и методика обработки подобных случаев описана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 00:17 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
vkle http://php.net/manual/ru/language.types.float.php Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции. Там же и методика обработки подобных случаев описана. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 00:36 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
cylbps, а за что спасибо-то? мне никогда не было понятно, почему я должен говорить спасибо за то, что 0.1 + 0.2 не равно 0.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 14:10 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661cylbps, а за что спасибо-то? мне никогда не было понятно, почему я должен говорить спасибо за то, что 0.1 + 0.2 не равно 0.3 Не надо благодарить. прими как факт :) А винить в этом надо не компьютер или компилятор, а того, кто решил, что десятичная система оптимальна для счёта (разумеется помним, что 10 именно потому, что у нас 10 пальцев). Просто не любая конечная десятичная дробь является конечной двоичной дробью (и наоборот). И дело не в том, что 0.1+0.2!=0.3... дело в том, что 0.1 в двоичной системе уже не получится записать. Если переводить 0.1 в двоичную систему то: 0.1*2 = 0.2 | 0 0.2*2 = 0.4 | 0 0.4*2 = 0.8 | 0 0.8*2 = 1.6 | 1 0.6*2 = 1.2 | 1 0.2*2 = 0.4 ---> тут бесконечный цикл со второй по пятую операцию 0.1(10) = 0.0[0011](2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2016, 16:39 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёрприми как факт Код: php 1. True Два мира - два Шапиро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2016, 12:50 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661Програмёрприми как факт Код: php 1. True Два мира - два Шапиро Код: php 1. Результат: 1 (то есть true) P.S. Как думаешь, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 03:30 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёр, тебе не заметна разница в написании ? Код: sql 1. и Код: sql 1. ПрограмёрРезультат: 1 (то есть true) а что 1 есть true - это, стало быть, ты мне пояснил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 04:45 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
В python, java, php выражение 0.1 + 0.2 == 0.3 ложное, что там происходит в питоне лично я не знаю, может кто-то пояснит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 12:14 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661Програмёр, тебе не заметна разница в написании ? Код: sql 1. и Код: sql 1. ПрограмёрРезультат: 1 (то есть true) а что 1 есть true - это, стало быть, ты мне пояснил ? Итак... посидел, поэкспериментировал, что бы увериться, что я прав. На пятом перле "print 0.1+0.2==0.3" молчит (то есть выражение ложно) на шестом перле "print 0.1+0.2==0.3" выводит True Отсюда вывод, что на шестом перле числа проходят некоторое преобразование, которое не проходили в perl5 проверяем теорию тестом (не стал заморачиваться с подсчётом времени, просто взял значения, при которых разница видна визуально) запускаем в консоли: Код: php 1. ждём меньше половины секунды Код: plsql 1. как по мне, дак целая вечность уже прошла То есть, арифметические операции в perl6 не так просты, и с числами что-то происходит и при этом что-то очень сложное. Как вариант - лишнее приведение типов (и как следствие округление), или же какие-то другие доп. действия. P.S. для чистоты эксперимента возможно стоило взять perl5 и perl6, но дело в том, что я perl не знаю вообще. А php всегда под рукой и принципы его работы мне более-менее ясны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 13:29 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёр, в Perl6 короткие числа(до 64bit) с плавающей точкой хранятся как об'ект типа Rational - в виде пары чисел numerator/denominator (числитель/знаменатель), что позволяет не страдать от ошибок арифметики плавающей точки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:05 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661Програмёр, в Perl6 короткие числа(до 64bit) с плавающей точкой хранятся как об'ект типа Rational - в виде пары чисел numerator/denominator (числитель/знаменатель), что позволяет не страдать от ошибок арифметики плавающей точки. Я лучше буду "страдать" от того, что у меня 0.1+0.2!=0.3, чем от того, что скорость выполнения обычной арифметической операции падает в 20-30 раз. P.S. Спасибо разработчикам php за то, что 0.1+0.2 не равно 0.3 P.P.S. Я то могу повлиять на сравнение, просто округлив число там, где это необходимо. А вот ты на быстродействие perl6, думаю, никак повлиять не сможешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:34 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. Код: php 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:37 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
всего лишь в 200 раз? Код: php 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:51 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661 Код: php 1. 2. 3. 4. 5. Код: php 1. 2. 3. 4. 5. Если "++" - это операция инкремента (а скорее всего это так), то твой код делает совсем не то, что я написал :) Давай уж по честному... ты можешь написать код с тем же функционалом, что и у меня, только с нормальным быстродействием (ну, хотя бы те же 0.8 секунды)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:56 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Что у тебя там за машина такая, что за 12 секунд выполнила? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:57 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
что-то я неудачный запуск выложил на пыхе, вот: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 14:58 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
моя консольprogramer@newDebian:~$ time php -r '$sum=0; for($i=0; $i<1000000; $i++) {$sum+=$i;}' real 0m0.102s user 0m0.092s sys 0m0.008s programer@newDebian:~$ time perl6 -e 'my $sum; ++$sum for 1 .. 1_000_000' real 0m5.423s user 0m5.320s sys 0m0.108s programer@newDebian:~$ time perl6 -e 'my Rat $sum = 1.0; $sum++ for 1 .. 1_000_000' real 0m37.694s user 0m37.580s sys 0m0.164s programer@newDebian:~$ lscpu | grep -i mhz CPU MHz: 3108.164 programer@newDebian:~$ cat /proc/cpuinfo | grep 'model name' | uniq model name : Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz Не впечатлило... у меня уж никак не 0.9 секунды php5 - 0.1s "оптимизированный" perl6 - 5.4s "не оптимизированный" perl6 - 37.7s ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:02 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
автор"оптимизированный" perl6 - 5.4s В каком месте он оптимизированный то? Там int а не float просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:10 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Hettавтор"оптимизированный" perl6 - 5.4s В каком месте он оптимизированный то? Там int а не float просто. пока ни в каком Просто очень хочу увидеть следующий вариант от volodin661 P.S. В моём примере тоже был int... И это не помешало ему выполняться 20 секунд. Тут всего лишь 5s видимо потому, что используется операция инкремента, а не суммы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:22 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёр, задачи впечатлить чем-либо php-кодёра(или програмёра?) я перед собой не ставлю, моё сообщение было не о секундах, думать о которых не следует свысока , а о двух подходах: первый : человек обслуживает компилятор языка второй : компилятор обслуживает человека ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:24 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
лично я лишь хотел ответить на Ваш вопрос: volodin661почему я должен говорить спасибо за то, что 0.1 + 0.2 не равно 0.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:30 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
авторИ это не помешало ему выполняться 20 секунд. Где пример с 20 секундами? оО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:32 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661Програмёр, задачи впечатлить чем-либо php-кодёра(или програмёра?) я перед собой не ставлю, моё сообщение было не о секундах, думать о которых не следует свысока , а о двух подходах: первый : человек обслуживает компилятор языка второй : компилятор обслуживает человека и в обоих случаях человек остаётся недоволен ладно, пора завязывать, всё и так понятно. P.S. ещё попробовал потестить питон (делал это до появления цитируемого поста). Говорили, что на нём тот же трабл с арифметикой (все числа являются объектами). Не знаю так ли это, но вот результат: Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:34 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Hett, я не видел твоих сообщений выше, уж так получилось, и как ты ответил на мой вопрос про спасибо, кстати ? ( и не надо меня на Вы с большой буквы, переписка у нас пока неофицальная, расслабьтесь, ребята ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:35 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёр, на яве вообще за 5 мс выолняется. Но и питон и ява и пых используют нативные числа с плавающей точкой, а не какие-то структуры. volodin661, авторпочему я должен говорить спасибо потому что он работает весьма оптимально, и если вдруг нужна критическая точность, то в любом ЯП можно найти механизмы для работы с Decimal и отказаться от чисел с плавающей точкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:42 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
HettавторИ это не помешало ему выполняться 20 секунд. Где пример с 20 секундами? оО да вот же он Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:43 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
HettПрограмёр, на яве вообще за 5 мс выолняется. Ну конечно. Это же совсем другая "весовая" категория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 15:47 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Интересно стало как она справится с decimal: Код: java 1. 2. 3. 4. 72 мс ну и Код: java 1. 2. 3. естестно true да, приходится "обслуживать" компилятор, но зато скорость... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:01 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Hett, какую критическая точность от boolean выражения ожидает получить человек, написавший 0.1 + 0.2 == 0.3 ? он знает об этом точно, а что при этом происходит под капотом его не должно тяготить. Кстати, про капот; на автомобилях раньше был рычажок опережения зажигания и даже последняя женщина знала, что его надо тащить на себя перед под'ёмом в гору, а сейчас, скажи честно, тебя сильно беспокоят вопросы тонкостей опережения зажигания внутри двигателя при изменении условий движения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 16:06 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Оффтоп: "рычажок опережения зажигания" ?! оО Речь о том, что в народе называют "подсос", и что имеет название "регулятор топливной заслонки"? Я ещё не так стар и может, просто, не застал те времена, когда кроме подсоса в машинах были ещё какие-то рычажки... Но что-то очень сильное ощущение, что речь именно об регуляторе топливной заслонки. Уж я то помню, чего стоит настроить зажигание так, что бы двигатель не давал вибраций, что бы не было ощутимых перебоев и внезапных просадок в оборотах ))) После двухчасовой возни, я бы этот "рычажок" гвоздями приколотил)) теперь по теме: 1. "рычажок" существует для того, что бы его можно было потянуть, или затолкать обратно (то есть включать разные режимы работы). Применимо ли это к обсуждаемому поведению perl6? 2. нынешнее отсутствие "рычажка" обусловлено тем, что автоматика сама определяет оптимальный режим работы. Применимо ли это к обсуждаемому поведению perl6? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 17:17 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Програмёр, подсос оставь в покое, если дядя пишет про зажигание, значит так оно и есть. на данный момент втолковать тебе чего бы то ни было не представляется мне возможным, увы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 18:21 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661Програмёр, подсос оставь в покое, если дядя пишет про зажигание, значит так оно и есть. на данный момент втолковать тебе чего бы то ни было не представляется мне возможным, увы. - Как Вы всё успеваете? - Я просто никогда ни с кем не спорю. - Но это ведь невозможно! - Ну не возможно - так невозможно. ... Ну невозможно - так невозможно :) ---------------------------------------------------------------------------- Програмёр покинул беседу ---------------------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 19:44 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
авторесли дядя пишет про зажигание, значит так оно и ест объясните мне пожалуйста, зачем изменять УОЗ при движении в гору? рычажок этот нужен был для корректировки опережения зажигания в зависимости от залитого бензина (он так и назывался, октан-корректор). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 12:22 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Hett(он так и назывался, октан-корректор). 'октан-корректор' был в 60-х, регулировка осуществлялась поворотом с последующей фиксацией гайкой корпуса прерывателя-распределителя( в добавление к автоматическим (центробежному и вакуумному) корректорам ), а я говорил про полностью ручное управление зажиганием, которое было вынесено на приборную панель в 20-х - 30-х ( за все пассажирские модели не скажу, но в гоночных точно ) Hettобъясните мне пожалуйста, зачем изменять УОЗ при движении в гору? при движении в гору сопротивление движению растёт, соответственно обороты ДВС падают, соответственно наполняемость цилиндров смесью изменяется в худшую сторону, смесь сгорает дольше, соответственно нужно корректировать зажигание и поджигать пораньше, чтобы максимальное давление при сгорании смеси пришлось аккурат к верхней мёртвой точке расположения поршня в цилиндре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 17:23 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
и, возвращаясь к теме, теперь скажите мне, А) зачем нужны все эти дополнительные знания про зажигание в 21-ом веке, если надо просто ехать ? Б) зачем нужно помнить, что 0.2 + 0.2 равно 0.4, а 0.1 + 0.2 не равно 0.3, если тебе надо просто сравнить в 21-ом веке результат арифмет. действий с каким-то значением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 17:51 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
volodin661и, возвращаясь к теме, теперь скажите мне, А) зачем нужны все эти дополнительные знания про зажигание в 21-ом веке, если надо просто ехать ? Б) зачем нужно помнить, что 0.2 + 0.2 равно 0.4, а 0.1 + 0.2 не равно 0.3, если тебе надо просто сравнить в 21-ом веке результат арифмет. действий с каким-то значением?Всякому - своё. Простому пользователю калькулятора и автомобиля эти знания, конечно, не нужны. Однако, они потребуются инженеру, конструктору, программисту, которые разрабатывают эти самые автомобили и калькуляторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 18:11 |
|
||
|
Непонятка с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
автор'октан-корректор' был в 60-х, регулировка осуществлялась поворотом с последующей фиксацией гайкой корпуса прерывателя-распределителя( в добавление к автоматическим (центробежному и вакуумному) корректорам ), а я говорил про полностью ручное управление зажиганием, которое было вынесено на приборную панель в 20-х - 30-х ( за все пассажирские модели не скажу, но в гоночных точно ) Октан-корректор только и делал, что изменял ОУЗ. Какое еще полностью ручное управление зажиганием? На каждый такт сжатия кнопочку нажимать? То, что вы описали в начале поста, это обычная регулировка УОЗ путем вращения трамлера, это никакой не октан корректор. И автоматическая регулировка тоже не имеет большого отношения. авторпри движении в гору сопротивление движению растёт, соответственно обороты ДВС падают, соответственно наполняемость цилиндров смесью изменяется в худшую сторону, смесь сгорает дольше, соответственно нужно корректировать зажигание и поджигать пораньше, чтобы максимальное давление при сгорании смеси пришлось аккурат к верхней мёртвой точке расположения поршня в цилиндре. Когда падают обороты ДВС, нужно на более низкую передачу переключаться, а не угол зажигания корректировать. К тому же со снижением числа оборотов в момент времени угол зажигания как раз тоже становится более поздним, а увеличение опережения приведет к ретардам. Что вы мне сказочки то рассказываете. авторзачем нужны все эти дополнительные знания про зажигание в 21-ом веке, если надо просто ехать ? Пример совсем не корректный. Есть инструменты которые требует знаний. Езда на авто это одно, а программирование - это совсем другое. авторзачем нужно помнить, что 0.2 + 0.2 равно 0.4, а 0.1 + 0.2 не равно 0.3, если тебе надо просто сравнить в 21-ом веке результат арифмет. действий с каким-то значением? Как мы уже выяснили на синтетических тестах, затем, чтобы оптимально использовать вычислительные мощности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2016, 12:59 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1461024]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 361ms |

| 0 / 0 |
