Re: Java пытается маскировать неточную природу double-ов
От: Alexander G Украина  
Дата: 21.02.22 05:55
Оценка: 3 (2) :)
Здравствуйте, vsb, Вы писали:

vsb>А вы как думаете? Может я не прав и это норма в современных языках? Лично мне ближе подход C++, который показывает математически точное значение при заданной точности.


Современные тенданции — специально не печатать незначащие десятичные знаки, напечатать их лишь столько, чтобы при обратной конвертации из строки попасть туда же.
Подход printf неправильный, устаревший. Следует использовать std::format.

#include <format>
#include <iostream>

int main()
{
    printf("%.60f\n", 1.0/3); // 0.333333333333333314829616256247390992939472198486328125000000
    std::cout << std::format("{:60}\n", 1.0/3); // 0.3333333333333333
    printf("%.60f\n", 0.3); // 0.299999999999999988897769753748434595763683319091796875000000
    std::cout << std::format("{:60}\n", 0.3); // 0.3
}


Да, кроме std::format так же себя ведёт и std::to_chars
Русский военный корабль идёт ко дну!
Отредактировано 21.02.2022 7:55 Alexander G . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.