#c# #visual-studio-2010 #floating-point #scientific-notation
#c# #visual-studio-2010 #с плавающей запятой #научная нотация
Вопрос:
Вы когда-нибудь наблюдали это явление:
Если я попытаюсь вычислить следующее вычисление в ImmediateWindow Visual Studio 2010 C # .Net, я получу это странное решение.
1E-9 * 100 = 0.00000010000000000000001
1E-9 * 1E 2 = 0.00000010000000000000001
Даже если я выполняю вычисления таким образом:
double val = 1E-9;
0.000000001
val = val * 100;
0.00000010000000000000001
Если я вычислю то же самое вычисление в Windows calc, я получу ожидаемый результат:
1E-9 * 100 = 0,0000001
Если кто-то что-то знает об этом поведении, я был бы очень рад получить информацию.
Комментарии:
1. Может быть, калькулятор Windows просто не использует удвоения? Почему вы предполагаете, что они должны иметь одинаковую точность?
2. Вас интересует поведение
0.00000010000000000000001
, которое является результатом попытки сохранить десятичные цифры в двоичных компьютерах (и на него уже много раз давался ответ), или тот факт, что Windows Calc выполняет это правильно, когда другие ошибаются?
Ответ №1:
Не имеет значения, используете вы экспоненциальную нотацию или нет, вы просто работаете с точностью до плавающей запятой. Если вы хотите большей точности, используйте десятичную систему счисления, например:
decimal val = 1E-9;
0.000000001
val = val * 100;
0.0000001
Посмотрите, что каждый специалист по информатике должен знать об арифметике с плавающей запятой