Pregunta

Me he encontrado con un extraño problema con este código:

legibIndex = 206.385 - 84.6 * (countSylb / countWord) - 1.015 * (countWord / countSent);

Este es el cálculo del índice de legibilidad de un archivo de texto dado. Dado que esta es una tarea, nos dijeron que el índice debe ser (80, 80,3 o exactamente)

Mi número de sílabas, recuento de palabras, y el recuento de condena son los correctos (que coinciden con los números dados para los archivos de texto de muestra.

Incluso si codificar los números en, no tengo 80, a pesar de que hago cuando lo puse en mi caclulator exactamente como se ve. No me puedo imaginar lo que está mal.

Aquí está la ecuación nos dieron:

Index = 206.835 - 84.6 * (# syllables/# words) - 1.015 * (# words/# sentences)

Como se puede ver, sólo conecté mis variables (que están manteniendo los valores correctos. Para referencia, los valores son: 55 sílabas, 40 palabras, 4 Sentencias, como propuesta por el instructor. Los valores de mi programa produce cuando RAN es un índice de legibilidad de 112.

Me estoy perdiendo algunos soportes, o qué? Estoy perplejo!

¿Fue útil?

Solución

De buenas a primeras, a partir de los nombres (que incluye la palabra recuento ) supongo que countSylb, countSent y countWord se declaran como enteros, y por lo tanto sus divisiones están haciendo aritmética de enteros, truncando las porciones decimales. las arrojó sobre flotadores y que debe solucionarlo.

legibIndex = 206.385 - 84.6 * ((float)countSylb / ((float)countWord) - 
               1.015 * (((float)countWord / ((float)countSent);

Otros consejos

Es probable que tenga un problema de tipo de datos en la que está redondeo debido int / int = int en lugar de flotador.

Si lanzas para flotar o declarar como flotador Que le ayudará.

trabaja aquí. Tal vez usted está haciendo una división entera en lugar de la división de flotación:

>>> def leg(syl, wor, sen):
...   return 206.835 - 84.6 * (float(syl) / wor) - 1.015 * (float(wor) / sen)
... 
>>> print leg(55, 40, 4)
80.36

Si sus cálculos dentro de los corchetes son enteros puro el cálculo será soltar las piezas decimales y se redondeará (igual que el uso de suelo ()) que obviamente va a alterar el resultado.

Cuando ejecuto esto en Haskell, me da la respuesta correcta (80,36000000000001).

Creo que el problema es que (# / # sílabas palabras) viene a 1 si está utilizando la aritmética de enteros. Si se asegura de que se realice el cálculo utilizando la aritmética de coma (sílabas por lo que # / # palabras = 1,375) flotante, usted debe obtener la respuesta correcta a cabo.

Como se ha señalado anteriormente, sus variables de recuento son probables enteros de números enteros, pero su expresión contiene números de punto flotante literales. Fundición esos enteros en los flotadores dará el valor correcto. También debe asegurarse de que lo que está almacenando el resultado de la expresión en (legibIndex) es también de tipo float.

Es probable que sea un problema . Para estar seguro, grupo las cosas que piensas deben ocurrir primero más de lo que ya tiene.

Editar No, no lo es; el uso de precedencia de los operadores de C consigo 80.36. Espero chispas que era correcto (y la primera fuera de la marca) que se trata de un problema de tipo de datos y se está ejecutando en el redondeo prematura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top