Скорость выполнения функций ceil(),round(),floor() - страница 7

 
Andrey Kisselyov:

допустим взять как пример:
при изменении даже битности машины, вы перешли на 64 бита и точность машины увеличилась, ваша формула перестанет работать так как точность машины будет куда больше чем вы задаете в своей погрешности.

с уважением.

P.S. возможно возникнуть и другие варианты, при которых ваша формула будет давать сбой на некотором ряде чисел. постоянно подбирать погрешность из за перехода на другую машину или при изменениях в компиляторе, о которых вас не известили, или при изменении представления числа в машине, или из за урезания дробной части числа при компиляции в новых версиях терминала ... да мало ли что может измениться, я считаю это не очень хорошо. сделать IF или мучиться в догадках что будет дальше прописывая погрешность снова и снова...

я думаю есть над чем подумать.


Я не согласен. При увеличении точности формула(y=(int)(x+0.9999999999999997);) не перестанет работать, она будет работать так же. Как и раньше ошибка будет возникать в диапазоне дробной части числа от DBL_EPSILON(текущее значение: 0,00000000000000022204460492503131) до 0,0000000000000003, если даже DBL_EPSILON уменьшиться до нуля (чего быть не может конечно же), то диапазон увеличиться на размер текущего DBL_EPSILON, т.е. на 2.2204460492503131e-016. Я считаю, что на такой диапазон ошибок даже можно не обращать внимания.

И вообще что за термин - "точность машины". Существует стандартизированная точность типа double и других типов. Незачёт Вашим  рассуждениям. Про P.S. вообще молчу.)))  Боюсь обидеть.

С уважением. 

 
Nikolai Semko:

Я не согласен. При увеличении точности формула(y=(int)(x+0.9999999999999997);) не перестанет работать, она будет работать так же. Как и раньше ошибка будет возникать в диапазоне дробной части числа от DBL_EPSILON(текущее значение: 0,00000000000000022204460492503131) до 0,0000000000000003, если даже DBL_EPSILON уменьшиться до нуля (чего быть не может конечно же), то диапазон увеличиться на размер текущего DBL_EPSILON, т.е. на 2.2204460492503131e-016. Я считаю, что на такой диапазон ошибок даже можно не обращать внимания.

И вообще что за термин - "точность машины". Существует стандартизированная точность типа double и других типов. Незачёт Вашим  рассуждениям. Про P.S. вообще молчу.)))  Боюсь обидеть.

С уважением. 

если брать применительно к ценам в рынке, то вообще можно оставить точность на 5-6 знаке, а так как вы работаете в математикой и не известно кому и для чего понадобятся ваши новые быстрые вычисления, следует применять "принцип поведения дурачка" согласно которого не важно кто и не важно когда может поставить туда такое значение при котором функция ошибется в расчетах.

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

поскольку в процессоре ограниченное количество бит в каждом регистре, сложение вычитание или другая операция в них сопряжена с некоторыми тонкостями работы со флагами.
как тот кто работал на ассемблере вы должны понимать о чем идет речь.
так вот скажите  мне при команде ADD  на разных моделях процессора будет ли переполнение, если вы будете писать на ассемблере код применяя одно и тоже число на разных моделях и вообще может оно не поместиться в какой либо регистр и будет усечено, начиная с 8 битных  прошлого поколения до 64 битных и более текущего поколения и как это может измениться в будущем(развитие техники так быстротечно, прошло всего каких то 40 лет, а у нас уже много ядерные процессоры вместо ламповых начала 80х) ?

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

с уважением.
 
Nikolai Semko:

Ладно, господа отличнички, уговорили. Меняю для вас специально функцию ceil:

данный вариант работает на 25-50% медленнее  варианта: y=(int)(x+0.9999999999999997); Но зато максимально корректен, работает так же для отрицательных чисел и при этом все равно быстрее функции ceil(x) где-то в 3 раза

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

Переход на личности традиционно означает отсутствие аргументов по существу. Но все же задам вопрос. Что побудило Вас сокращать время миллиона округлений с 8 до 5 или 2 миллисекунд?  Чем реально оказался загружен процессор, если даже такие задержки оказались узким местом? Я таких потребностей не встречал. Может быть, это что-то абстрактное, академический интерес?
 
Vladimir:
Переход на личности традиционно означает отсутствие аргументов по существу.

согласен, а также отсутствие культурного поведения, в попытке унизить собеседника.

с уважением.

 
Andrey Kisselyov:
по поводу "не зачет", я не давал оценки вашим рассуждениям и не принижал ваших достоинств, чего и вам желаю. уважайте себя, ткнуть вас мордой в гряз может любой, стоит ли давать повод оппоненту делать это, нарываясь на грубость своими поступками? все мы развиты в чем то, а что то нам просто не интересно или не имеет для нас значения.
Vladimir:
Переход на личности традиционно означает отсутствие аргументов по существу.
Andrey Kisselyov:

согласен, а также отсутствие культурного поведения, в попытке унизить собеседника.

Ого! Я конечно прошу прощения, если кого-то обидел. Наверное вас задели эти мои слова:

Nikolai Semko:

Ладно, господа отличнички, уговорили. Меняю для вас специально функцию ceil:

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

Nikolai Semko:

И вообще что за термин - "точность машины". Существует стандартизированная точность типа double и других типов. Незачёт Вашим  рассуждениям. Про P.S. вообще молчу.)))  Боюсь обидеть.

Ну знаете ли... По-моему у вас богатое воображение. В обычном дружеском стёбе вы разглядели "переход на личности", "попытке унизить собеседника", "принижение достоинств"...

Или я что-то упустил, и где-то в другом месте перешёл границы приличия?

Извините, Андрей, но у меня просто, видимо, не хватает знаний и опыта, чтобы понять то, что Вами было написано в том P.S.:

Andrey Kisselyov:
P.S. возможно возникнуть и другие варианты, при которых ваша формула будет давать сбой на некотором ряде чисел. постоянно подбирать погрешность из за перехода на другую машину или при изменениях в компиляторе, о которых вас не известили, или при изменении представления числа в машине, или из за урезания дробной части числа при компиляции в новых версиях терминала ... да мало ли что может измениться, я считаю это не очень хорошо. сделать IF или мучиться в догадках что будет дальше прописывая погрешность снова и снова...
буду очень благодарен, если мне кто-то объяснит смысл написанного.
Ещё раз прошу прощения за свой тон. Я всегда выступаю за взаимное уважение между коллегами и корректность поведения. Бес попутал.
 
Vladimir:
Что побудило Вас сокращать время миллиона округлений с 8 до 5 или 2 миллисекунд?  Чем реально оказался загружен процессор, если даже такие задержки оказались узким местом? Я таких потребностей не встречал. Может быть, это что-то абстрактное, академический интерес?
Andrey Kisselyov:
лучше открыть профилирование и посмотреть, где в вашем коде тормозит исполнение, и это явно не математические функции. в основном это циклы, разного рода запросы и так далее и тому подобное. математические функции одни из самых быстрых и пытаться что то там выкроить, не очень разумно на мой взгляд.
Не знаю, с чего вы решили, что у меня что-то тормозит. Напротив, я считаю свои алгоритмы самые быстрые. Просто я немножко больной до быстродействия. Конечно, использование такой альтернативной замены функций округления дает совсем незначительный выигрыш, лишь доли процента. Но как говорится с миру по нитке. Так же происходит, например, в самолетостроении и ракетостроении. В борьбе за уменьшения веса не в ущерб прочности модифицируют всё, даже болты. Может быть это одна из причин, почему в наше время самолет самый безопасный вид транспорта вопреки логике.
 
Nikolai Semko:

Ого! Я конечно прошу прощения, если кого-то обидел. Наверное вас задели эти мои слова:

Ну знаете ли... По-моему у вас богатое воображение. В обычном дружеском стёбе вы разглядели "переход на личности", "попытке унизить собеседника", "принижение достоинств"...

если вы позволяете себе "СТЕБАТЬСЯ" над друзьями, у вас нет друзей, есть клоуны вокруг вас, над которыми вы иногда смеетесь и не дорожите их дружбой и мнением.

Nikolai Semko:

Или я что-то упустил, и где-то в другом месте перешёл границы приличия?

перешли, я не являлся и не являюсь вам ни другом ни братом ни еще кем то близким, чтоб вы мне могли давать какую то оценку, ТЕМ БОЛЕЕ ПУБЛИЧНО.

Nikolai Semko:
Извините, Андрей, но у меня просто, видимо, не хватает знаний и опыта, чтобы понять то, что Вами было написано в том P.S.:буду очень благодарен, если мне кто-то объяснит смысл написанного.

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

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

Nikolai Semko:
Ещё раз прошу прощения за свой тон. Я всегда выступаю за взаимное уважение между коллегами и корректность поведения. Бес попутал.

извинения приняты. не повторяйте ошибок снова, иначе ваши слова пустой треп.

с уважением.

 
Nikolai Semko:
Не знаю, с чего вы решили, что у меня что-то тормозит. Напротив, я считаю свои алгоритмы самые быстрые. Просто я немножко больной до быстродействия. Конечно, использование такой альтернативной замены функций округления дает совсем незначительный выигрыш, лишь доли процента. Но как говорится с миру по нитке. Так же происходит, например, в самолетостроении и ракетостроении. В борьбе за уменьшения веса не в ущерб прочности модифицируют всё, даже болты. Может быть это одна из причин, почему в наше время самолет самый безопасный вид транспорта вопреки логике.
я за разумный подход к программированию, где можно ускорить не вопреки логики, это лучше сделать, но любую "болезнь" нужно лечить, так как это отклонение от здорового образа жизни.

с уважением.
 
Andrey Kisselyov:

если вы позволяете себе "СТЕБАТЬСЯ" над друзьями, у вас нет друзей, есть клоуны вокруг вас, над которыми вы иногда смеетесь и не дорожите их дружбой и мнением.

Похоже что Николай оказался прав насчёт зануд ))

Вот лично я нигде там не увидел перехода на личности.  А в ваших постах действительно много букв, но всё как-то мимо темы, такое ощущение что вы спорите просто ради спора.

Причина обращения: