Pull to refresh
1
0
Юрий @UPushken

User

Send message

Подтверждаю. В банках платили очень много лет 25 назад, когда ещё не было специалистов. Потом банки стали использовать стандартную практику платить на 15% меньше рынка. Потому что работать у нас большая честь (с)

Вы, кажется, не поняли, что умножение происходит не на единицу

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

потому что это приводит к неверным вычислениям

сказал что передавать надо 1.

Математика Ваша не бьется, поэтому и спрашиваю.

Равно 4. Не ноль и не 1.11022e-16
Равно 4. Не ноль и не 1.11022e-16

В принципе, мне всё равно.

Вы будете удивлены 

Удивлен. Даже подпись на картинке имеется - а вам всё равно непонятно.

CIO – это тот, кто совмещает в одном лице понимание того, как будет развиваться ИТ организации (её технологическое обеспечение) в светлом будущем (и обеспечивает неуклонность этого развития) с обеспечением стабильности работы организации в ИТ-части в суровом настоящем

Пожалуйста

Не станет. Задача руководителя продать говно и закрыть проект. А не нудеть, что надо всё переписать

g++ -o math math.cc -ffast-math -O2

А так точно можно?

Нельзя
Нельзя

std::cin >>num;

Что вводите сюда?

С проверкой выдаёт 0, а без 1.11022e-16.

Для какой переменной?

мол если множитель равен 1, то лучше не умножать, потому что это может изменить умножаемое число, если это число мало. Писал, очевидно, человек, который не знает, что в представлении с плавающей запятой числа хранятся так, что их относительная точность не зависит от того, равно число 1.e+100 или 1.e-100.

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

  • При умножении нет выравнивания порядков и связанной с этим потери точности

  • Нет потерь точности на представление единицы (как константы, а не как результата вычислений) в плавающем формате. Она хранится абсолютно точно.

  • При умножении результирующая экспонента = сумме экспонент, но у единицы она нулевая, а значит экспонента результата не изменится

  • Представление единицы имеет одни явные нули в мантиссе. Но есть одна неявная старшая единица. Именно она и гарантирует сохранение абсолютно всех знаков мантиссы другого сомножителя в старших разрядах результата. Ну а нули гарантируют обнуление всех остальных (младших) знаков мантиссы результата

  • Таким образом, мантисса результата абсолютно не изменится

  • Знак результата не изменится

  • При применении одного и того же алгоритма умножения для всех плавающих чисел, и даже при выполнении реальных вычислений, умножение на единицу никак не изменит исходное число. Даже на epsilon. Вообще ни на сколько.

  • Вот такой фокус

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

И это оказало некоторое воздействие на систему. Вы же сами хотя в одном месте пишете сначала это

эта проверка является совершенно бессмысленной, хоть и довольно безвредной 

а затем вот это

Однако это бессмысленное изменение сделало главное: проблемная модель снова стала глючить точь-в-точь, как глючила до этого.

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

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity