2015-04-29 2 views
-2

У меня возникли проблемы со следующим кодом. Он не дает того же ответа в excel, что и C#, и я уверен, что правильный ответ правильный. Я уже пытался изменить целочисленные значения на двойные, добавив десятичную точку. Пожалуйста, порекомендуйте.Таблица Excel не дает того же ответа, что и программа C#

версия первенствуйте

=((1+BZ21)*BX21*CG21*(B21*1))-(0.5*BZ21*BX21*CG21*((C21*0)+(0*D21))) 

C# версия

voltageVector[rows, 5] = ((1.0 + ki) * Rp * c * (ma * 1.0)) - (0.5 * ki * Rp * c * ((mb * 0.0)+ (mc * 0.0))); 

Константы ки, Rp, с и ма все двойные значения точности.

ki = 0.69999999999999907; 
Rp = 0.0469486290322602; 
c = 60.0 
ma = 2.0; 
mb = 1.0; 
mc = 1.0; 

C# ответ

9.5775203225810763 

Ответ Эксел 9.56760000000433

+2

Какие ценности вы получаете в каждом? – adamdc78

+1

Эта точка этой части '(0.5 * ki * Rp * c * ((mb * 0.0) + (mc * 0.0)))'? Он всегда будет давать 0, не так ли? – Loocid

+0

Возможно, та же самая цель, что и 'ma * 1.0'. Хотя с двойной точностью это будет не точно «0» или «ма». – adamdc78

ответ

0

Я думаю, что что-то смешно в таблицу Excel. Когда я попробовал это, я получаю тот же ответ как в C#, так и в Excel. Я верю, что правильный ответ - 9.577520323. Вот скриншот из моей таблицы Excel:

enter image description here

+1

То же самое - мой номер Excel соответствует опубликованному выпуску C#. –

+0

Да! Я выяснил проблему, это связано с тем, что C# получает неправильное значение для Rp !!!!. Большое спасибо за помощь, хотя! –

+0

'9.5775203225810200' можно получить из' = 1.69999999999999000 * 0.0469486290322602 * 60 * 2' - так кажется C# был (о) правильно? – pnuts