Проблема, с которой я столкнулся в POWER / LOG, заключается в том, что, хотя они, похоже, адаптируются к типу данных, которые вы отправляете (тип выходной переменной соответствует типу первой переменной), точность, похоже, останавливается близко к пределам типа float, что приводит к неправильному выводу.Пример:
DECLARE @ten numeric(18,4) = 10
declare @num numeric(18,4) = 234567890
SELECT power(@ten,log(@num,@ten))
Ouput = 234567890.0000 Что является правильным
Однако, если мы увеличим точность, выполните следующие действия:
DECLARE @ten numeric(18,6) = 10
declare @num numeric(18,6) = 234567890
SELECT power(@ten,log(@num,@ten))
Вывод = 234567889.999999 Что не правильно, но округление может это исправить (?)
Наконец, если вы измените точность на что-то вроде числового (18,9), проблема усугубится:
DECLARE @ten numeric(18,9) = 10
declare @num numeric(18,9) = 234567890
SELECT power(@ten,log(@num,@ten))
Output = 234567889.999999310 Какойне правильно, и округление не исправит это.
Я предполагаю, что проблема в том, что хотя функции POWER и Log могут принимать очень точные типы данных, их рабочие переменные должны быть плавающими?У кого-нибудь есть опыт работы с этим или опыт работы с ним?