Войти
ФлеймФорумНаука

Кому интересно, откопал наглядное объяснение (ролик) о том, почему нельзя делить на ноль, и что будет, если всё-таки поделить (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
10:24, 12 янв. 2018

CD
> Потому что для целых чисел
Zegalur
> юзай флоат
Раз уже два человека говорят про флоат, надо объяснить.
Флоат во первых - не точен и не дает гарантированной точности. А результат вычислений зависит от настроек компилятора. Это заметный минус, ты не будешь уверен что все заработает как надо на другом компиляторе и других флагах. Во вторых флоат - бывает медленее на старых процах. Мелочь а неприятно. В третьих там свои заморочки и даже простое сравнение двух переменных - уже задачка. Сравнивать как это делаешь с интом "if (x==y){}" - не получится, а потребуется учитывать а) точность, б) всякие больные флаги типа nan.

То есть в итоге флоат имеет еще больше проблем для вычислений чем инт.

CD
> требует
> Windows XP
Ну так тем более плохо: твое решение не универсально, не прописано в стандарте с++ а зависит от операционки. И для линя наверняка потребуется другое.


#16
11:36, 12 янв. 2018

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

#17
12:16, 12 янв. 2018

Zefick
> Зато научившись этим опциям
Научиться можно и на потолке спать при желании.
Охота тебе при каждом сравнении помнить точность, помнить про nan'ы, охота при каждом счете помнить настройки компилятора и как именно какой компилятор считает. И ведь реально тот же open watcom флоаты не так посчитает как gcc. А разный счет означает что ты не знаешь, как программа себя поведет при смене компилятора.

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

> профпригодность
Дело в том что кодомакаки люди подневольные. Как начальство скажет так и делают. Они не имеют своего мнения, ну иначе их просто уволят. Даже стиль оформления кода выбрать не могут. Так что нет смысла их обсуждать.

#18
12:32, 12 янв. 2018

http://rextester.com/ACNL77907
http://rextester.com/YLDKP53254

#19
15:40, 12 янв. 2018

сделали лучше бы что при 5/0=5 и не было бы проблем. всё.
возьми пять яблок и раздели их на ничего - с яблоками ничего не будет. как было 5, так и осталось.
по сути эта операция есть отсутствие операции. nop
грёбаные математики.

#20
15:58, 12 янв. 2018

122
> Охота тебе при каждом сравнении помнить точность

При каждом не нужно,  это важно лишь при сравнении на равенство, которое для float лучше не делать, а если надо, то выполняется как-то так

 if (fabs(f1 - f2) <=FLT_EPSILON*fmax(fabs(f1), fabs(f2))
 {
     //do smth...
 }

и которое можно вообще макросом/шаблоном оформить и забыть навсегда. Причём, специально для Zefic'а, от языка это не зависит.

#21
16:23, 12 янв. 2018

122
> Дело в том что кодомакаки люди подневольные.
  Одинокий инди-разработчик тоже подневольный. Он вынужден доделывать в одного то, что задумал сделать когда-то даже если ему это уже надоело, потому что иначе завтра будет нечего жрать. Причём он даже никому не может сказать чтобы задачу переложили на кого-то другого, а ему дали новую, или попросить помощи. А не делать её == уволиться. Только при увольнении хотя бы какую-то зарплату выплачивают всё равно.

#22
16:47, 12 янв. 2018

122
> Предположу что ты и к компилятору оказываешься привязан и вместо
> борланда-ваткома-кланга-жсс у тебя один: майкрософтская студия.
у флоатов есть два режима компиляции - быстрый (при котором результаты зависят не то что от компилятора, а от типа процессора или фазы луны) и "по стандарту", в котором всё более-менее предсказуемо ценой лишних проверок при каждой операции.
Думаю, и так понятно какой из режимов используют в сферах типа геймдева все кроме кучки эстетов.

#23
17:50, 12 янв. 2018

122
> А результат вычислений зависит от настроек компилятора.

В игре factorio в мультиплеере используется синхронная симуляция, т.е. по сети передаются только действия игроков.
При этом результат симуляции, включая операции с плавающей точкой, на клиентах под мак, линукс (не msvc) и винду  (msvc) полностью совпадает.
Цитата от одного из разработчиков:

There's nothing wrong with floating point numbers. The only limitations they have are the epsilon - the minimum difference between two floating point numbers and that you can't store a non-rational number precisely.

#24
17:57, 12 янв. 2018

CD
> There's nothing wrong with floating point numbers. The only
122
> Научиться можно и на потолке спать при желании.
Только зачем, непонятно.

CD
> that you can't store a non-rational number precisely.
Да и рациональные не можешь, помню даже в выражении 12-2 можно было получить 9.9999999. Но это не точно. :)

entryway
Есть такое.
Но на мой взгляд это вещи разных порядков: непредсказуемость на границе диапазона, либо непредсказуемость на всем диапазоне вообще.

#25
18:07, 12 янв. 2018

122
> > Научиться можно и на потолке спать при желании.
> Только зачем, непонятно.
Это передергивание.

>помню даже в выражении 12-2 можно было получить 9.9999999.
Целые числа до 24 бит (до 16777216 включая) во float и до 53 бит (до 9007199254740992 включая) в double представимы точно.

#26
18:17, 12 янв. 2018

CD
> Это передергивание.
Нет, это самая суть вопроса: зачем делать сложнее, если можно проще.
Зачем писать на флоатах, обкладывая их костылями при сравнении и плясками с компиляторами чтобы получать идентичный результат счета.

> представимы точно.
Для всех компиляторов и для всех опций этих компиляторов?

#27
18:38, 12 янв. 2018

122
> 122
> > Научиться можно и на потолке спать при желании.
> Только зачем, непонятно.

Вот кстати расскажи, как так получилось что ты решил спать на потолке. Ты наверное единственный в мире разработчик, кто использует fixed для всех вычислений.

#28
19:20, 12 янв. 2018

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

#29
19:49, 12 янв. 2018

122
> Для всех компиляторов и для всех опций этих компиляторов?
Ты в курсе, что как /Ddouble=float, так и /Dint=std::int16_t входит во "все" опции компиляторов?

x87 (устарел, сейчас по-умолчанию используется SSE, где такого нет) можно переключить в режим пониженной точности через _control87(_PC_24, _MCW_PC) или аналог во время выполнения программы, в остальном я бы рассчитывал на стандартное поведение.

>Зачем писать на флоатах, обкладывая их костылями
Для fixed-precision другие костыли, и для типовых задач их больше чем у плавающей точки.

Страницы: 1 2 3 4 Следующая »
ФлеймФорумНаука

Тема в архиве.