(unsigned long long) 3LL * pow(4LL, 38LL) + 2LL * pow(4LL, 23LL) + pow(4LL, 20LL) + 3LL * pow(4LL, 5LL) + 2LL * pow(4LL, 4LL) + 1LL;
происходит оверфлоу из перевода из дабла в лонг лонг. можно ли это как-то посчитать?
Жесть, gmp.h
Его нет в gcc, а я не могу библиотеки ставить (не зависящее от меня ограничение)
не вижу проблемы, у тебя ж uint64_t точнее, чем дабл (формата binary64), так что тебе никто не мешает распарсить экспоненту дабла и разделить число на 2 в этой степени, ответ записать в uint64_t и не потерять в точности. (ну либо оценить 2 в степени экспонента относительно степени 10 и также разделить)
я посчитал уже (unsigned long long); там другие проблемы оказались. Теперь я не могу __int128 распечатать Но неважно, я в будущем к этому делу вернусь. Пока что опыта очень мало
Unsupported message
Реально странно что это не работает
Что не работает? Тот способ, что я описал работает. Маслёнок выше скорее всего просто вывел дабл с нулевой точностью в принтфе
Если маслёнок это я, то у меня даблов в коде нет совсем
Так как ты сконвертил дабл в улонг?
Постфикс LL
Это чудо? Или магия? У тебя 4 ^ 38 степени... И какой тип возвращает pow?))
https://pastebin.com/RF5CeNaf Прошу прощения, я переписал на инт128 и сделал свой пов
Мда, а теперь перечитай моё сообщение о точности...
Вначале стоит всё-таки подумать, а только потом написать код
Я с телефона сейчас, код написан пару часов назад. https://stackoverflow.com/questions/16839658/printf-width-specifier-to-maintain-precision-of-floating-point-value Такую штуку надо делать?
мне одному кажется, что формат целых чисел не предусматривает эуспоненту? или эт такой хак создания своего типа данных и определения операций с ним?
Что вы имеете ввиду?
запиши целое число в экспоненциальной форме
простите, я слов таких не знаю. Слишком мал и слишком глуп
Обсуждают сегодня