Здравствуйте, Qbit86, Вы писали:
Q>Может, что-нибудь с переполнениями/НаНами/эпсилонами?
Неа, это слишком просто было бы.
И чтоб два раза не вставать — проблема не в перфомансе.
double при больших значениях плывёт. Потому что плавучка же. Я так на счетчике миллилитров топлива нарвался — у меня был унаследованный проект, работающий с топливораздаточным контроллером, и он замечательно работал в офисе. А на реальной АЗС начались чудеса — счетчики топлива там имели большие значения, потому что контроллер уже проработал пару лет. И в результате в отчётах постоянно возникал этакий "дребезг" — в после каждого налива значение то чуть выше ожидаемого, то чуть ниже. Исправилось переделкой на decimal и в коде, и в базе.
А вообще тут идеально подошли бы числа с фиксированной точкой и заданной точностью как в Ada (а больше такого нигде и нет, насколько мне известно):
Timespan под собой на тиках всё считает.
А в миллисекунды и прочую чепуху уже конвертирует.
Логично было бы брать тики, множить их и из тиков формировтаь
Здравствуйте, Слава, Вы писали:
S>>Ну и где тут можно ошибиться? С>double при больших значениях плывёт.
Близко, но не совсем. Хинт: проблема не в больших значениях.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Слава, Вы писали:
S>>>Ну и где тут можно ошибиться? С>>double при больших значениях плывёт. S>Близко, но не совсем. Хинт: проблема не в больших значениях.
TimeSpan test = TimeSpan.FromMilliseconds(0.5);
double ms = test.TotalMilliseconds; // Returns 0
тики long, милисекунды double — внутри при приведении округление
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Sinix, Вы писали:
S>>Ну и где тут можно ошибиться?
H>В округлении миллсекунд до тактов, когда полмиллисекунды превратятся в ноль тактов.
Здравствуйте, vasmann, Вы писали:
V>Здравствуйте, hardcase, Вы писали:
H>>Здравствуйте, Sinix, Вы писали:
S>>>Ну и где тут можно ошибиться?
H>>В округлении миллсекунд до тактов, когда полмиллисекунды превратятся в ноль тактов.
V>Согласно кода: https://referencesource.microsoft.com/#mscorlib/system/timespan.cs,a719193f6f6b1015 V>Они добавляют пол секунды в случае если миллисекунды не равны нулю. Таким образом одна секунда минимум будет. Хотя да, ожидалось пол.
Там где я говорил секунда — имелась ввиду миллисекунда
Здравствуйте, vasmann, Вы писали:
V>Таким образом одна (милли)секунда минимум будет. Хотя да, ожидалось пол.
Неа. Там away from zero округление https://dotnetfiddle.net/iIpgqe