|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Здравствуйте! Подскажите пожалуйста что за ерунда, почему результаты разнятся с Excel? C# 249.93 * (decimal)Math.PI / 180 = 4,362101399509423415 Excel 249.93 * ПИ() / 180 = 4,36215957715116 4,362101399509423415 / C# 4,36215957715116 / Excel ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:14 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Nechto, Nechto249.93 * (decimal)Math.PI / 180 в C# вот это не скомпилится, так что... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:22 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
hVosttNechto, Nechto249.93 * (decimal)Math.PI / 180 в C# вот это не скомпилится, так что... перепутал double, а не decimal 249.93 * (double)Math.PI / 180 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:27 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Nechto, в Excel ПИ() = 3,141592654 в C#//NET = 3,1415926535897931 ещё вопросы? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:29 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
hVosttNechto, в Excel ПИ() = 3,141592654 в C#//NET = 3,1415926535897931 ещё вопросы? )) Пробовал подставлять пи который в Excel в С# результат все равно не сходится. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:39 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Excel 2007 3,14159265358979 // ПИ() 4,36210139950943 // 249,93 * ПИ() / 180 C# 3.1415926535897931 // Math.PI 4.3621013995094273 // 249.93 * Math.PI / 180 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:40 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
NechtoПробовал подставлять пи который в Excel в С# результат все равно не сходится. что не сходится? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:41 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
потому, что при работе с числовыми типами с плавающей запятой использование оператора равенства недопустимо. На разных процессорах у вас может получиться разный результат у меня выражение в C# возвращает "249.93 * Math.PI / 180.0" возвращает 4.3621013995094273, а в Excel 4.36210139950943. в таких типах не бывает точных значений, так как практически все операции возвращают приближенные значения, арифметическая погрешность и чем больше операций, тем больше эта погрешность. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:50 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
NechtoПробовал подставлять пи который в Excel в С# результат все равно не сходится. 4.3621013995094273 // C# = 249.93 * Math.PI / 180 4,3621013995094200 // Excel 2007 = 249,93 * 3,14159265358979 / 180 Похоже, в екселе отображается ограниченное количество знаков после запятой (в 2007-м = 14). Если просуммировать две одинаковые ячейки (= 249,93 * 3,14159265358979 / 180) то результат будет 8,7242027990188500 а не 8,7242027990188400, т.е. проблема в отображении... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:53 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Roman Mejtesв таких типах не бывает точных значений, так как практически все операции возвращают приближенные значения, арифметическая погрешность и чем больше операций, тем больше эта погрешность. Ну как это не бывает точных значений? Есть стандарт IEEE 754, все значения там "точные", ибо любое значение - это "точное" (детерминированное) положение 64 бит. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 13:59 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
LR, формат представления числа тут при чём? я пишу о точности в вычислениях, а не о формате представления числа. как я уже написал выше, на двух разных процессорах, можно получить 2 разных значения. Я уже не говорю про более сложные операции. Когда сравнивают 2 числа с плавающей точкой учитывают погрешность. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 14:26 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Ну, не знаю. У меня и шарп у эксель одинаковое число выдают: 4,36210139950943 офис 2017, студия тоже 2017, проект на шарпе под .NET FW 4.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 14:30 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
У маня как не крути разные значения выдает Пример 249,93 * 3.14159265358979 / 180 4,36210139950943 // Excel 4,36210139950942 // C# Не знаю в чем проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 14:50 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
NechtoУ маня как не крути разные значения выдает Пример 249,93 * 3.14159265358979 / 180 4,36210139950943 // Excel 4,36210139950942 // C# Не знаю в чем проблема. Ну, для чисел с плавающей запятой это норма ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 14:51 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Roman Mejtes, Стандарт IEEE 754 включает в себя в т.ч. и описание операций двоичной арифметики. Т.е., не имеет значения, где реализована работа с этим стандартом (в железе или в софте, кстати, сейчас даже некоторые видеокарточки умеют с этим работать), результат вычисления выражения должен быть одинаковым везде и всегда. Не может быть, чтобы используя double, Excel и .Net вычисляли разный результат... А вот отображать они могут по-разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 15:04 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
NechtoУ маня как не крути разные значения выдает Пример 249,93 * 3.14159265358979 / 180 4,36210139950943 // Excel 4,36210139950942 // C# Не знаю в чем проблема. COS(4,36210139950943) = -0,3431679388993890 Math.Cos(4,36210139950942) = -0.3431679388993954 SIN(4,36210139950943) = - 0,93927406315278700 Math.Sin(4,36210139950942) = -0.93927406315278439 В общем эта погрешность очень плохо! При округлении координат, точность координат может на метр улететь. При решение прямой и обратной геодезической задачи. К примеру если обратная геодезическая задача была выполнена в C#, а прямая геодезическая задача в Excel. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 15:07 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 16:15 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Ага, вот и ответ https://support.microsoft.com/ru-ru/help/78113/floating-point-arithmetic-may-give-inaccurate-results-in-excel Мантисса и показатель степени сохраняются в отдельных компонентах. В результате возможная точность различается в зависимости от размера обрабатываемого числа (мантиссы). В случае с Excel, хотя эта программа может сохранять числа от 1,79769313486232E308 до 2,2250738585072E-308, обеспечивается точность только до 15 знака. Это ограничение является прямым следствием строго соблюдения спецификации IEEE 754, а не ограничением программы Excel. Таким же уровнем точности обладают и другие программы для работы с электронными таблицами. Nechto, т.о., придется либо обеспечить аналогичное ограничение для работы с double (15 знаков) в .Net, либо, если округление значений в задаче недопустимо, отказываться от double+excel и использовать, например, decimal в .Net ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 16:39 |
|
При делении разные в c# и Excel разные результаты
|
|||
---|---|---|---|
#18+
Как только мантиссе потребуется больше 52 бит ("вширь"), мы потеряем точность Код: c# 1. 2.
А ограничение 15 знаков гарантирует что мантисса поместится на 52 битах (+ 1 виртуальный для единички). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 17:52 |
|
|
start [/forum/topic.php?fid=20&msg=39588402&tid=1399528]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 326ms |
total: | 470ms |
0 / 0 |