2016-10-04 3 views
1

У меня есть следующий запрос:EXP() в BigQuery возвращает ошибку с плавающей запятой

SELECT EXP(col) FROM `project.dataset.tablename`; 

Где col является FLOAT. Однако, я получаю эту ошибку: Error: Floating point error in function: EXP.

Я пробовал EXP() с фиктивными данными, и он работает. Например:

SELECT EXP(col) FROM (
    SELECT 1. as col UNION ALL 
    SELECT 2. as col); 

Почему я получаю с плавающей точкой ошибку с фактическими данными и как ее обойти? Я пробовал такие вещи, как EXP(CAST(col as FLOAT64)) и EXP(ROUND(col, n)), но я все равно получаю ту же ошибку.

+0

Идентификатор задания в случае, если кто-то может его отладить? –

ответ

3

Возможно, вы работаете с номерами, большими, чем 709.7827.

Weird номер, но даже в Фортрана документы:

EXP(X)

Exponential.

X must be less than or equal to 709.7827.

http://sc.tamu.edu/IBM.Tutorial/docs/Compilers/xlf_8.1/html/lr277.HTM

Это потому, что числа становятся слишком велики после е^709.7827.

1

Выполните запрос:

SELECT MAX(col) 
FROM project.dataset.tablename; 

Это, вероятно, то быть понятно, почему вы получаете ошибку переполнения. Вы можете работать вокруг него с помощью case:

SELECT (CASE WHEN col < ?? THEN EXP(col) END) 
FROM project.dataset.tablename; 

Я мог бы предложить значение, но это, вероятно, очевидно, из вашего приложения - сказать что-то больше, чем 10 или 100 может быть просто неразумно.

Смежные вопросы