Так что я понимаю разницу для поплавки против двойники в C ++.
Дабл — это просто двойная точка с плавающей запятой, тогда как поплавок сингл
с плавающей точкой (удвоить размер точности).
Мой вопрос: почему поплавки представлены как «300000011920928955078125e-24» (для значения 3,0), но двойное число будет просто показано как 3,0?
Почему двойное отображение не отображает все последние цифры? Он имеет более высокую точность, но все еще страдает от той же конечной точности, что и с плавающей запятой, поэтому я не уверен, почему он также не отображается таким образом.
Это потому, что многие значения не могут быть представлены точно в плавающей запятой (одинарной или двойной точности), но double может представлять нечто гораздо более близкое. Если вы печатаете с большим количеством знаков после запятой, вы почти наверняка увидите ошибку.
Значение 0.3 не может быть представлено точно. Кроме того, результат вычисления может получить ошибку из операндов. «0.3 * 10» увеличит ошибку в результате, поэтому не будет точно 3.0.
Лучший аналог пытается отобразить «1/3» в десятичном виде. Вы можете написать это 0.333333 или 0.333333333333. Если вы умножите их на 3, вы получите 0.999999 или 0.999999999999. Отображая их на экране калькулятора (который имеет фиксированное количество цифр), первое будет отображаться с ошибкой, а второе округляется.
Изменить: код, чтобы продемонстрировать это:
#include <stdio.h>
int main()
{
float f = 0.3;
double d = 0.3;
printf("%.50lf %.50lf\n", f, d);
printf("%.10lf %.10lf\n", f, d);
}
Вывод:
0.30000001192092895507812500000000000000000000000000 0.29999999999999998889776975374843459576368300000000
0.3000000119 0.3000000000
Других решений пока нет …