2012-02-26 3 views
2

Я использую ниже код для вычисления логарифма по основанию 2.журнала базы 2 и нан

Math.log(x)/Math.log(2); 

С помощью этой функции, я получаю нан, если х = 4/5.

С calc, excel эта проблема не существует.

Как избежать получения нано и получения реальной стоимости?

ответ

8

У меня есть сильное чувство, что ваш 4/5 является целым числом. Что означало бы, что 4/5 будет оцениваться до 0 из-за целочисленного деления.

log(0) отрицательная бесконечность, которая может быть источником вашего NaN.

Чтобы это исправить, отливать свои номера, чтобы с плавающей точкой, прежде чем сделать разделение:

double x = (double)4/5; 
6

Я подозреваю, что ваша проблема связана с тем, что 4/5 является 0, потому что он выполняет разделение с использованием целочисленной арифметики. Если вы хотите использовать арифметику с плавающей запятой, чтобы получить 0.8, попробуйте 4.0/5.

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