Size: a a a

2020 November 21

ID

In Dev in pro.cxx
Wild_Wind
Да, но чтобы по нормальному, надо собирать и либы с lto.
Он их тогда чутка инструментирует и на основе этой инструментации кода оптимизирует.
А если без межмодульной, то девертуализация возможна по нормальному лишь в случае, если все виртуальные вызовы видны, и если реализация интефейса помечена как final.
Немного не понял, что значит "видны все виртуальные вызовы"? И есть какие-то гарантии, что девиртуализция произойдёт при final?
источник

BD

Bulat Dzhamaliddinov in pro.cxx
Дело в том, что мне надо сравнить числа e^x1 и e^x2, где x1 - x2 = 1,e-17. После конвертирования получается, что exp((double)x1) == exp((double)x2)
источник

m

magras in pro.cxx
magras
double может представить любое 32 битное число без потери точности. Вот 64 бита уже не все влезут.
Вообще достаточно посмотреть на число бит мантисы. Если я правильно помню в double 50 с чем то бит мантисы. Правда стандарт С++ не дает гарантий на формат чисел с плавающей точкой, но в большинстве реализаций это будет так.
источник

m

magras in pro.cxx
Bulat Dzhamaliddinov
Дело в том, что мне надо сравнить числа e^x1 и e^x2, где x1 - x2 = 1,e-17. После конвертирования получается, что exp((double)x1) == exp((double)x2)
Чтобы сравнить две экспоненты не обязательно брать экспоненты. База же одинаковая.
источник

D

Danya in pro.cxx
Bulat Dzhamaliddinov
Приветствую, никто не знает, как можно получить экспоненту в степени decimal? Что-то типо exp(Decimal)
В С++ есть тип decimal?
источник

BD

Bulat Dzhamaliddinov in pro.cxx
magras
Чтобы сравнить две экспоненты не обязательно брать экспоненты. База же одинаковая.
Да, я так сделал. Но преподу, которому я сдал работу, это не понравилось
источник

m

magras in pro.cxx
Bulat Dzhamaliddinov
Дело в том, что мне надо сравнить числа e^x1 и e^x2, где x1 - x2 = 1,e-17. После конвертирования получается, что exp((double)x1) == exp((double)x2)
Можно попробовать сконвертить аргумент exp в long double.
источник

VD

Vlad Doc in pro.cxx
magras
Можно попробовать сконвертить аргумент exp в long double.
И что это даст?
источник

BD

Bulat Dzhamaliddinov in pro.cxx
Необходимо сконвертировать x1 и x2 в long double без потери количества знаков после запятой. Я пробегал отладкой и увидел, что при конвертировании x1 = 2.223......14(17 знаков после запятой) x1 становится  2.223......(15 знаков после запятой)
источник

m

magras in pro.cxx
Vlad Doc
И что это даст?
Вычисление экспоненты будет в long double.
источник

VD

Vlad Doc in pro.cxx
Bulat Dzhamaliddinov
Необходимо сконвертировать x1 и x2 в long double без потери количества знаков после запятой. Я пробегал отладкой и увидел, что при конвертировании x1 = 2.223......14(17 знаков после запятой) x1 становится  2.223......(15 знаков после запятой)
И ты сравниваешь в десятичной?)
источник

VD

Vlad Doc in pro.cxx
Сравни в двоичной точности
источник

BD

Bulat Dzhamaliddinov in pro.cxx
Мне надо именно вычислить значение, а не сравнить исходные x1 и x2. Сама задача состоит в поиске  минимума функции. Мне в любом случае придется вычислить значение функции с точностью 17 знаков после запятой.
источник

BD

Bulat Dzhamaliddinov in pro.cxx
Для х1 и х2 соответственно
источник

W

Wild_Wind in pro.cxx
In Dev
Немного не понял, что значит "видны все виртуальные вызовы"? И есть какие-то гарантии, что девиртуализция произойдёт при final?
Что они находятся в одном юните трансляции. Или в нескольких, но с включенной межмодульной. В общем, чтобы в одном проходе работы компилятора были видны и виртуальные вызовы и их реализация, чтобы можно было заменить виртуальный на прямой.
Гарантии при финал? Хз. Надо читать доку компилятора.
источник

m

magras in pro.cxx
Bulat Dzhamaliddinov
Необходимо сконвертировать x1 и x2 в long double без потери количества знаков после запятой. Я пробегал отладкой и увидел, что при конвертировании x1 = 2.223......14(17 знаков после запятой) x1 становится  2.223......(15 знаков после запятой)
Это все артефакты отладочной печати и конвертации binary -> decimal, как уже заметил Vlad Doc. При переходе от double к long double точность не должна теряться.

Кроме того 17 знаков в десятичном представлении это уже предал точности 64 битного double.
источник

DF

Dollar Føølish in pro.cxx
итак, если я правильно понимаю, ожидается что 64-битный инт будет представлен без потери точности при конвертации в long double?
источник

DF

Dollar Føølish in pro.cxx
80 бит из них получается 64 - мантисса?
источник

D

DigitaLobster in pro.cxx
Bulat Dzhamaliddinov
Да, я так сделал. Но преподу, которому я сдал работу, это не понравилось
В итоге окажется, что он хотел увидеть ряд Тейлора
источник

AD

Alexander Dudin in pro.cxx
Dollar Føølish
итак, если я правильно понимаю, ожидается что 64-битный инт будет представлен без потери точности при конвертации в long double?
Не гарантируется что long double - это 80 бит. Легко может быть и 64.
источник