|
aitap |
|
|
IvanX, начиная с C99 и C++11 это можно настроить описанными в стандарте способами.
|
|
|
|
 |
|
IvanX |
|
|
|
Последний раз редактировалось IvanX 25.09.2020, 18:24, всего редактировалось 3 раз(а).
Не имел ввиду принудительное округление. Давайте рассмотрим конкретный пример. Складываем два числа x=1 и y=1+2^(-23) типа float. Сумма x+y не может быть представлена типом float, лежит посередине между 2 и 2+2^(-22). Эксперимент в Visual Studio на C++ показал, что произошло округление суммы до 2. Это был какой режим? Так будет везде и всегда? Как из программы можно изменить режим округления?
|
|
|
|
 |
|
slavav |
|
|
|
Это было округление к чётному. Что вам мешает написать программу которая запустив четыре (если я не обсчитался) примера установит какой режим используется?
|
|
|
|
 |
|
IvanX |
|
|
|
Последний раз редактировалось IvanX 25.09.2020, 19:04, всего редактировалось 3 раз(а).
Кажется, начал понимать. Пусть x=1+2^(-22) и y=1+2^(-23). Сумма лежит посередине между 2+2^(-22) и 2+2^(-21). Эксперимент показывает, что сумма округляется до 2+2^(-21). Потому в этом случае в мантиссе младший бит 0.
|
|
|
|
 |
|
GAA |
|
|
|
Последний раз редактировалось GAA 25.09.2020, 22:48, всего редактировалось 2 раз(а).
Visual Studio... Как из программы можно изменить режим округления? Попробуйте в хелпе поискать _control87. ( Visual Studio/Run-Time Library Reference/Alphabetical Function Reference/_control87, _controlfp, __control87_2) (На практике я всегда писал изменение CW на асме. Как-то обычно и в голову не приходит использовать функции ЯВУ для этого.)
|
|
|
|
 |