Ожидается ли это поведение Excel с большим шестнадцатеричным числом?
Извините за смутное название вопроса, но я не уверен, как лучше это сформулировать.
Когда я вставляю следующий номер в ячейку Excel:
5000097208326954
это проявляется как
5E+15
Все в порядке. Я понимаю. Тем не менее, когда я смотрю в функциональной панели, это выглядит как
5000097208326950
Это я не понимаю. Поведение кажется независимым от любого предыдущего форматирования, которое я мог бы поместить в ячейку.
Это на Excel 2003 SP3.
Я пропускаю какое-то тонкое ожидаемое поведение, или это ошибка?
5 ответов
Кто-то, вероятно, придет с лучшим объяснением и исправлением, но в основном компьютеры хранят только определенное количество значащих цифр при представлении чисел с плавающей запятой и / или больших целых чисел. Excel (по крайней мере, по умолчанию) дает только первые ~15 цифр номера, а затем отбрасывает остальные. Вы можете убедиться в этом, добавив дополнительные цифры в конец вашего номера, например. 5000097208326954123, и эти цифры будут округлены до 5000097208326950000.
Как примечание, у вас, вероятно, есть шестнадцатеричная система счисления, перепутанная с научной нотацией
Excel выполняет всю математику как числа с плавающей запятой двойной точности. (Всего 64 двоичных разряда)
это дает вам примерно от 14 до 15 цифр в десятичном виде.
5000 097 208 326 954
16 цифр Если вы делаете это в Excel...
A1 = 5000097208326954
A2 = A1 +1
A3 = A2-A1
A3 будет отображать 0.
Полное раскрытие: я являюсь членом ACM и обязан рассказать общественности о рисках, связанных с компьютерами. Это в нашем кодексе поведения.
Пожалуйста, не используйте Excel для чего-либо критического.
Более точные ответы вы получите с помощью карманного научного калькулятора.
Excel написан на C/C++ и использует 64-битные числа. Он также использует библиотеки Microsoft с плавающей запятой для вычисления таких функций, как sin, cos и exp. Эти библиотеки довольно неточны по сравнению с научными, даже работают с одинаковыми номерами размеров.
Плавающая точка хороша для простых вещей, но ужасна для научной работы или серьезной инженерии, они слишком неточны. Численные методы, в которых вы добавляете и умножаете числа снова и снова, становятся ужасно быстрыми с плавающей запятой, поскольку 15 цифр точности исчезают, одна цифра каждые 4 умножения.
С плавающей точкой плохо для финансовой работы (0.2 - это бесконечное повторяющееся число в двоичной плавающей запятой.) Поэтому, если вы добавляете 0.2 доллара 1000 раз, часть денег пропадает. Программисты в финансовом мире используют числа с бесконечной точностью там, где они должны (точно так же, как пишут числа на бумаге), а затем используют специальные функции для вычисления денег, чтобы при суммировании всех округлений не пропадали деньги.
Программисты старой школы использовали FORTRAN для математики, которая выполняет математику в десятичном формате, как вы или я. Библиотеки очень точны в FORTRAN, поскольку пользователи ожидают использовать численные методы; вот для чего это. Калькуляторы используют десятичную внутреннюю тоже.
Я использовал Excel для воспроизведения ошибок математического округления в программах на Си раньше.
Таким образом, вы можете получить безумно неправильные графики ваших расчетов.
Как уже указывалось, это ограничение в 15 значащих цифр, когда Excel хранит числа. Если это не число, которое вам нужно использовать для вычисления чего-либо в соответствии с его значением, а скорее ссылка, такая как серийный номер или код продукта, тогда лучшим вариантом будет отформатировать ячейку как текст (а не значение по умолчанию для общего), прежде чем вставить его, он сохранит все цифры. Это также предотвратит его попытки быть умным и показать его в научной записи как "полезный".
Конечно, если это действительно шестнадцатеричное число (но вы случайно выбрали экзамен без цифры больше 9), то вы определенно не хотите, чтобы Excel воспринимал его как число. а) потому что он будет считать, что он десятичный, и это не удастся, если в нем есть буквы. б) это будет означать, что число еще больше по величине, и если вы преобразуете его в десятичную, вы будете на 15 цифр.
Вы спрашиваете, почему последняя цифра отображается как 0 вместо 4, да?
Я считаю, что эта ссылка содержит ответ. если вы посмотрите в спецификации расчета, максимальная точность составляет 15 цифр. Если посмотреть на другие спецификации, похоже, что Excel, вероятно, все еще содержит полное значение введенного вами числа, поэтому, если вы используете число в формуле, оно все равно должно вычисляться правильно.
Честно говоря, все важные цифры ускользнули от моего понимания в колледже, поэтому я не могу сказать вам, почему Excel был настроен таким образом.
Этот форум может дать вам указание на превышение встроенных ограничений, если это необходимо.
Кроме того, как вы форматируете Excel, чтобы распознавать значение как в HEX, а не DEC?
Щелкните правой кнопкой мыши по ячейке или во всех ячейках> Форматировать ячейки> Выберите один из следующих форматов:
- число (или его варианты): распознавать как числовое значение
- текст: лучший вариант, потому что если вы можете использовать 0 в левой части, они появятся
Ну, я не мог увидеть это решение здесь - только некоторая дискуссия о научной нотации или возможная ошибка в ваших шестнадцатеричных числах.