Ожидается ли это поведение Excel с большим шестнадцатеричным числом?

2953
Dancrumb

Извините за смутное название вопроса, но я не уверен, как лучше это сформулировать.

Когда я вставляю следующий номер в ячейку Excel:

5000097208326954 

это проявляется как

5E+15 

Все в порядке. Я понимаю. Тем не менее, когда я смотрю в функциональной панели, это выглядит как

5000097208326950 

Это я не понимаю. Поведение кажется независимым от любого предыдущего форматирования, которое я мог бы поместить в ячейку.

Это на Excel 2003 SP3.

Я пропускаю какое-то тонкое ожидаемое поведение, или это ошибка?

3
В этом вопросе нет ни одного шестнадцатеричного числа, только десятичное (хотя и научное обоснование). Пожалуйста, отредактируйте вопрос и теги. Suma 13 лет назад 0
5000097208326954 * - это * шестнадцатеричное число с десятичным значением 5,764,617,908,402,678,100 ... однако я признаю, что шестнадцатеричный характер значения, вероятно, не имеет значения Dancrumb 13 лет назад 1

5 ответов на вопрос

6
GummiV

Кто-то, вероятно, придет с лучшим объяснением и исправлением, но в основном компьютеры хранят только определенное количество значащих цифр при представлении чисел с плавающей запятой и / или больших целых чисел. Excel (по крайней мере, по умолчанию) дает только первые ~ 15 цифр номера, а затем отбрасывает остальные. Вы можете убедиться в этом, добавив дополнительные цифры в конец вашего номера, например. 5000097208326954123, и эти цифры будут округлены до 5000097208326950000.

Как примечание, у вас, вероятно, есть шестнадцатеричная система счисления, перепутанная с научной нотацией

Спасибо ... я не путаю шестнадцатеричные с научными обозначениями ... выбранное мной число определенно является шестнадцатеричным, просто Excel предполагает, что оно десятичное. Поскольку я не буду выполнять никаких математических операций с ним, я просто скажу Excel, чтобы он воспринимался как текст и с этим покончено. Однако эта последняя цифра немного ошеломила мой разум, так что спасибо за разъяснение этого! Dancrumb 13 лет назад 0
+1, если вы измените поле на число, оно также округляется до 5000097208326950, отбрасывая 4, но максимально допустимое число - 9.99999999999999E + 307 http://office.microsoft.com/en-us/excel-help/excel-specifications и-пределы-HP005199291.aspx N4TKD 13 лет назад 0
3
Tim Williscroft

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 для воспроизведения ошибок математического округления в программах на Си раньше.

Таким образом, вы можете получить безумно неправильные графики ваших расчетов.

Хоть и немного не по теме, не могли бы вы прокомментировать ваше «Пожалуйста, не используйте Excel для чего-то критического». комментарий. Числовые вычисления наследуются с числами конечной точности и подвержены распространению ошибок округления, но в Excel все хуже, чем в других методах, например. работа с числами с плавающей запятой на вашем языке выбора? GummiV 13 лет назад 0
На языках с Bignums (бесконечная точность) или BCD вы получите намного лучшие результаты, чем в Excel. Smalltalk, FORTRAN, PERL, Java и т. Д. Все это может сделать. Java не использует математические библиотеки MS, а те, что она использует, ближе к FORTRAN в ответах, которые они дают. Аппаратная математика процессора иногда очень хороша, но Intel заставляет вас подписать соглашение о неразглашении, чтобы увидеть ошибки процессора, поэтому даже если они работают плохо, я не могу сказать. Вы можете использовать MAPLE для математики; это даст очень хорошие ответы. По сути, математика - это то, что большинство людей считает работоспособным, но компьютер легко может ошибиться. Tim Williscroft 13 лет назад 0
2
Xantec

Вы спрашиваете, почему последняя цифра отображается как 0 вместо 4, да?

Я считаю, что эта ссылка содержит ответ. если вы посмотрите в спецификации расчета, максимальная точность числа составляет 15 цифр. Если посмотреть на другие спецификации, похоже, что Excel, вероятно, все еще содержит полное значение введенного вами числа, поэтому, если вы используете число в формуле, оно все равно должно вычисляться правильно.

Честно говоря, все важные цифры ускользнули от моего понимания в колледже, поэтому я не могу сказать вам, почему Excel был настроен таким образом.

Этот форум может дать вам указание на превышение встроенных ограничений, если это необходимо.

Кроме того, как вы форматируете Excel, чтобы распознавать значение как в HEX, а не DEC?

Позволю себе не согласиться. Я полагаю, что Excel никоим образом не "держит" округленные числа и / или использует их для расчетов. Данные несущественной части отбрасываются, когда Excel сохраняет номер. Пожалуйста, рассмотрите возможность редактирования своего ответа, чтобы избежать дезинформации читателей. GummiV 13 лет назад 1
2
AdamV

Как уже указывалось, это ограничение в 15 значащих цифр, когда Excel хранит числа. Если это не число, которое вам нужно использовать для вычисления чего-либо в соответствии с его значением, а скорее ссылка, такая как серийный номер или код продукта, тогда лучшим вариантом будет отформатировать ячейку как текст (а не значение по умолчанию для общего ), прежде чем вставить его, он сохранит все цифры. Это также помешает ему быть умным и показывать его в научной записи как «полезный».

Конечно, если это действительно шестнадцатеричное число (но вы случайно выбрали экзамен без цифры больше 9), то вы определенно не хотите, чтобы Excel воспринимал его как число. а) потому что он будет считать, что он десятичный, и не получится, если в нем есть буквы. б) это будет означать, что число еще больше по величине, и если вы преобразуете его в десятичную, вы будете на 15 цифр.

0
kokbira

Щелкните правой кнопкой мыши по ячейке или во всех ячейках> Форматировать ячейки> Выберите один из следующих форматов:

  • число (или его варианты): распознавать как числовое значение
  • текст: лучший вариант, потому что если вы можете использовать 0 в левой части, они появятся

Ну, я не мог видеть это решение здесь - только некоторое обсуждение научной нотации или возможной ошибки в ваших шестнадцатеричных числах.

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