c # — тип переменной, используемый в стандартном калькуляторе Microsoft

Я довольно новичок в программировании и недавно переделал «стандартный» калькулятор Microsoft с использованием C # (winforms), но хотел задать вопрос относительно типа переменной, которую Microsoft использует в «стандартном калькуляторе».

Чтобы определить используемый тип переменной, я ввел расчет в стандартном калькуляторе Microsoft:

88888888/9 (восемь 8).

Результат: 9876543.111111111 (9 десятичных знаков)

Затем я создал простое консольное приложение C #, которое делит 2 числа.

Сначала я использовал тип int, и, как и ожидалось, результат был 9876543.
Затем я использовал тип «double» и подошел довольно близко, получив результат 9876543.11111111 (8 знаков после запятой)
Я использовал десятичную дробь, и на выходе (опять же, как и ожидалось) было слишком много знаков после запятой!
Я использовал float, и результат был таким же, как у типа int (9876543).

float a = 88888888F;
float b = 9F;
float c = 0F;
Console.WriteLine("a / b is: {0}", c = a / b);
Console.ReadLine();

Из вышеприведенной информации я бы сказал, что Microsoft использует тип «double», так как он наиболее близок по десятичным знакам.

Но .. Я не уверен, что я сделал что-то не так в своем коде для типа с плавающей запятой. (Можете ли вы, ребята, дать мне знать, если приведенный выше код неверен? Я намеренно набрал casted float to float, на всякий случай, но изначально этого не произошло и все равно получил тот же результат в конце)

Я попробовал эту ссылку для некоторой информации о типах с плавающей точкой, но на самом деле не очень помогает: http://msdn.microsoft.com/en-gb/library/b1e65aza(v=vs.100).aspx

Затем я попробовал C ++ и получил похожие результаты.

float a = 88888888;
float b = 9;
float c = a / b;
cout <<  c;

double aa = 88888888;
double bb = 9;
double cc = aa / bb;
cout << cc;

Прости меня, если я упускаю что-то безумно очевидное! Лучшим ответом будет тот, который скажет мне, какой тип переменной использует Microsoft для своего стандартного калькулятора, и предоставит некоторую форму подтверждения этого. Кроме того, если я допустил ошибку в моем коде выше, любые исправления будут приветствоваться.

3

Решение

Точность для двойной 15-16 цифр. Вот почему, когда вы использовали двойной, вы получили только 8 знаков после запятой. Десятичные с точностью до 28-29 значащих цифр, поэтому вы получили больше десятичных знаков, чем хотели. Если вы хотите соответствовать калькулятору Windows и иметь 9 знаков после запятой, вы можете использовать decimal тип и использование Decimal.Round () установить его до 9 десятичных знаков.

decimal a = 88888888;
decimal b = 9;
decimal c = 0;
Console.WriteLine("a / b is: {0}", Decimal.Round(c = a / b, 9) );
Console.ReadLine();

Редактировать —

Причина, по которой калькулятор Windows показывает другую степень точности, заключается в том, что он использует arbitrary-precision arithmetic library, От Википедия.

В Windows 95 и более поздних версиях используется арифметика произвольной точности
библиотека, заменяющая стандартную библиотеку IEEE с плавающей точкой. Это
предлагает bignum точность для основных операций (сложение, вычитание,
умножение, деление) и 32 цифры точности для продвинутых
операции (квадратный корень, трансцендентные операторы).

Компилятор C # не использует ту же библиотеку произвольной точности, которая, вероятно, объясняет разницу в результатах.

3

Другие решения

Если вы посмотрите на MSDN:http://msdn.microsoft.com/en-us/library/b1e65aza.aspx. Вы бы знали, что float имеет точность только 7 цифр, что в вашем случае составляет 9876543.

2

По вопросам рекламы [email protected]