OccamaRazor
@OccamaRazor

Как увеличить точность double C++?

Пытаюсь сделать одинаковое вычисление с помощью C++ чтобы точность была как в языке Ruby, однако C++ жестче округляет значения а делать round() для каждого прохода не вариант так как чисел после запятой может быть от 1 до 16, что посоветуете?
a = 3.2
b = 4.2
p = 8.3
puts ((a+b) * (p / 100)) # 0.6142000000000001


#include <stdio.h>
#include <iostream>

using namespace std;

int main(void)
{
    long double a = 3.2;
    long double b = 4.2;
    long double p = 8.3;
    cout << (a+b) * (p / 100) << endl; // 0.6142
    return 0;
}


----
a = 9.809999999999999
b = 11.1 
p = 8.3

puts ((a+b) * (p / 100)) # 1.7355299999999998


#include <stdio.h>
#include <iostream>

using namespace std;

int main(void)
{
    long double a = 9.809999999999999;
    long double b = 11.1;
    long double p = 8.3;
    cout << (a+b) * (p / 100) << endl; // 1.73553
    return 0;   
}
  • Вопрос задан
  • 6158 просмотров
Пригласить эксперта
Ответы на вопрос 1
Therapyx
@Therapyx
Data Science
Не совсем корректно поставлен вопрос, тем что тебе нужно - ты понижаешь точность.
У float 23 мантисы, у double 52. Теоритически дабл имеет двухкратную точность в сравнении с float.

C++ жестче округляет значения

Это как понимать?

У тебя может быть до 16 чисел после запятой - это уже сильно округленно. Поставь себе конкретно вопрос - сколько именно чисел после запятой ты хочешь видеть в итоге? На столько и округляй.
Если же отвечать конкретно на формулировку твоего вопроса, а именно "как повысить точность", то 1 из ответов был бы long double
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы