- За яких обставин, безпеку порівняння на == стає низькою? Треба змінну помножити, поділити або що, щоб double почав показувати похибка начебто не 0. а 0.00000001. і доводиться застосовувати епсилон, а не просте порівняння.
- В налаштуваннях компілятора є опція: Модель обчислень з плаваючий крапкою (точний, строгий, швидкий). На що вона впливає, якщо встановлено "швидкий", то double буде не точно працювати?
заданий 14 Лютого '15 о 9:17
Порівняння на суворе рівність майже ніколи не безпечно. Замість нього слід використовувати fabs (x-y) Єдиний випадок, коли можна дозволити собі суворе порівняння - це якщо є якась константа, яку ти міг сам привласнити (явно, без обчислень), і з якої порівнюєш для того, щоб дізнатися, чи було перепрісваіванія. І навіть в цьому місці треба бути обережним, тому що відомі випадки, коли завдяки оптимізації у порівнюваних величин виявляється різний тип, що призводить до різної точності і нерівності. Ще все обчислення з цілими числами до 2 53 точні. Це використовується мовами з єдиним числовим типом (наприклад js). Однак, якщо ти впевнений, що значення ціле, то навіщо взагалі використовувати double. Краще взяти 64-бітний цілий тип. Якщо ви хочете порівняти два double. найкраще використовувати таке порівняння (після знака <вы указываете до какого знака после запятой вас интересует сравнение): Якщо if виконався - два ваших double рівні. відповідь дан 17 Лютого о 9:35 Чим ця відповідь відрізняється від інших? - Qwertiy ♦ 17 Лютого о 10:52 @Qwertiy Я думаю, що новачкам цей спосіб буде зрозуміліше, він не використовує ніяких функцій - Олексій 17 Лютого о 11:07 Так мій теж не використовує :) - Qwertiy ♦ 17 Лютого о 12:43 Не знаю, чи буде корисний для Вас моя порада. При зчитуванні з файлу точок деякій залежності - наведених з деяким кроком (0.1) по абсциссе або з випадковим кроком, я, звичайно, без шкоди для точності намагаюся абсциси виразити за допомогою двійкових дробів (знаменник = 2 ^ n). Наприклад, 0.1 = 51/512. А потім, за допомогою інтерполяції зраджую абсциси і ординати. Тоді порівняння ==, <и> стають коректними. Багато часу інтерполяція даних не займає і на точність практично не впливає. відповідь даний 14 Лютого '15 об 11:41Схожі статті