Сравнение больших пар - PullRequest
       7

Сравнение больших пар

0 голосов
/ 17 сентября 2018

Позвольте мне начать с того, что это не вопрос о сравнении допусков десятичной точности !Это больше проблема внутреннего представления больших двойников в том, что после определенного диапазона компьютер начинает терять значимость, а не десятичную сторону.Например,

double d1 = 1e20+8000;
double d2 = 1e20;
Debug.WriteLine(d1 == d2); 

Теперь это дает истину, что для меня очень неприемлемо.Преобразование в десятичную на данный момент в проекте не может быть и речи.Есть ли способ смягчить это, например, вычисляя как-то, что на ^ 20 компьютер представляет числа ^ 20 + - 8000 одинаковые?Кажется, что допуск для этого показателя, превышающий 8000, вызывает корректное сравнение, но мне нужно точное сравнение с точностью до десятичной точки, за исключением того, что мне не нужны большие числа.

1 Ответ

0 голосов
/ 17 сентября 2018

Теперь это дает истину, что для меня очень неприемлемо.

Тогда вы должны использовать тип данных, который делает то, что вы хотите. Вы никогда не должны использовать числа с плавающей запятой, когда ожидаете точности. decimal это то, что вы должны использовать.

Изменение типов данных - это единственный вариант, который работает в долгосрочной перспективе. Если вы не хотите туда ехать, нет варианта, который не потребовал бы значительного объема работы по проверке сделанных расчетов.

...