Oracle exp函数数值溢出错误
Oracle exp function numeric overflow error
我正尝试在 Oracle 中做这样的事情:
select exp(300) from dual
我得到数字溢出错误,我怎么能从 300 或更大的数字中得到指数,因为我不知道。
谢谢。
exp(300) 是 1.942426e+130,即 greater than the range of Oracle's NUMBER
datatype - 您在 Oracle 中可以拥有的最大数字是:9.99...9 x 10125 最多 38 位有效数字。
简而言之,不,您将无法在 Oracle 中计算 exp(300)。
正如 Boneist 所说,Oracle NUMBER 数据类型的小数位数从 -84 到 127。EXP 函数定义为接收 NUMBER,return 接收 NUMBER。所以不能直接使用EXP函数
虽然有一些解决方法。
Binary_double可以存储1.79E308。因此,对于直到 E308 的数字,您可以通过将指数分解为小于 E127 的 NUMBER 来使用它,将它们转换为 BINARY_DOUBLE 并将结果相乘。
您还可以在 Java/C++/VB 等中使用 external function 来计算指数和 return 结果作为细绳。这将假设您不必对结果进行任何计算,否则您需要创建一个外部函数,在所有必要的计算之后 returns 最终结果。
我正尝试在 Oracle 中做这样的事情:
select exp(300) from dual
我得到数字溢出错误,我怎么能从 300 或更大的数字中得到指数,因为我不知道。
谢谢。
exp(300) 是 1.942426e+130,即 greater than the range of Oracle's NUMBER
datatype - 您在 Oracle 中可以拥有的最大数字是:9.99...9 x 10125 最多 38 位有效数字。
简而言之,不,您将无法在 Oracle 中计算 exp(300)。
正如 Boneist 所说,Oracle NUMBER 数据类型的小数位数从 -84 到 127。EXP 函数定义为接收 NUMBER,return 接收 NUMBER。所以不能直接使用EXP函数
虽然有一些解决方法。
Binary_double可以存储1.79E308。因此,对于直到 E308 的数字,您可以通过将指数分解为小于 E127 的 NUMBER 来使用它,将它们转换为 BINARY_DOUBLE 并将结果相乘。
您还可以在 Java/C++/VB 等中使用 external function 来计算指数和 return 结果作为细绳。这将假设您不必对结果进行任何计算,否则您需要创建一个外部函数,在所有必要的计算之后 returns 最终结果。