Regra de Sturges

int n=50

final double constante = 3.22; // ou será 3,3

double logaritmo=Math.log(10)/Math.log(n);

System.out.printf("%f", logaritmo);

double numero_de_classesk=(1 + constante * logaritmo);

Não esta funcionando.

R: 0,588592

log 50 => 1,69897

Já tinha feito isso não funciona.

O metodo Math.log() trabalha com logaritmo neperiano.

O certo seria utilizar Math.log10()

Na verdade você fez a conversão de base… Faz assim:

double logaritmo=Math.log(n)/Math.log(10)

Ou então utiliza Math.log10().

Não sei nada de tal logaritmo neperiano.

Seria isso?
double logaritmo=Math.log10(n);

1 curtida

Isso… Você até pode usar o Math.log(), mas você precisaria tirar da base e (número neperiano) e passar pra base 10… Pra isso você faz Math.log(n)/Math.log(10). No que você mostrou ai, você inverteu. Trouxe pra base n ao invés de trazer pra base 10.

image

Não tem problema em usar uma ou outra?

double logaritmo=Math.log(n)/Math.log(10);

double logaritmo=Math.log10(n);

Tem livros que mostra 3,22 e outros 3,3 na constante qual seria o correto?

Não tem problema… Pode usar uma ou outra. Só vejo usando 3,3.

O double numero_de_classesk deveria ser int numero_de_classesk o que acha?

Só arredondar…

int numero_de_classesk = Math.round(1 + constante * logaritmo);

O que seria Math.round?

Esse método, tido como o método padrão para arredondar valores nesta classe, é usado para receber um parâmetro decimal (Double ou float) e retornar o valor arredondado em inteiro.

Acho que no lugar do Math.round usar o Math.floor o que acha?

Só pegar a parte inteira.

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu0rsoBdpvgYvzZqPDnqo4JZp06G_kQKzDrZKZzOdr0jwzlBP5TQ

No caso deveria mostra só 45.

O problema é que o Math.floor sempre vai arredondar para baixo, independentemente da parte decimal… Ou seja: Math.floor(45,99) vai retornar 45. Já o Math.round(45,99) retornaria 46.

A regra de sturges arredondar o número ou só pega a parte inteira do número?

Ex:

45,99 => R: 45 ou 46

é bem arbitrário. normalmente é pra cima