¿Está bien inicializar una matriz que contiene fracciones en c ++?

A2A.

Si, podrías. Pero debe especificar explícitamente el tipo doble de esta manera:

doble timetomaturity [] = {
(doble) 2/12,
(doble) 8/12,
(doble) 14/12,
(doble) 20/12
};

Es porque la especificación C señaló que hacer divisiones de enteros debería dar como resultado enteros y se redondearía al entero más cercano.

De los documentos estándar C:

3.2.1.3 Flotante e integral
Cuando un valor de tipo flotante se convierte en tipo integral, la parte fraccionaria se descarta. Si el valor de la parte integral no puede ser representado por el tipo integral, el comportamiento es indefinido.
23
Cuando un valor de tipo integral se convierte a tipo flotante, si el valor que se está convirtiendo está en el rango de valores que se pueden representar pero no se pueden representar exactamente, el resultado es el valor más alto o el más bajo más cercano, elegido en una implementación. manera definida.

Sí, no hay problema en absoluto. Todo el trabajo lo realizará el propio compilador.

#include

int main ()
{

int arr [] = {1.6,2.3,3.4,3.5,1.6}, i;

para (i = 0; i <2; ++ i)
printf (“\ n% d”, arr [i]);
devuelve 0;
}

Como arr es un tipo entero, el resultado será

1

2

Es perfectamente válido inicializar así. Pero lo que sale mal es que cuando le das un nombre de función sin tipo de retorno en C ++, se supone implícitamente que int.

Lo mismo se aplica a los números también.

El siguiente programa da la salida como 3.14286

#include

int main ()

{

doble a [] = {(doble) 22 / (doble) 7, (doble) 99 / (doble) 7};

std :: cout << a [0];

}

“Fracción” no es un tipo numérico estándar, y “/” entre enteros devuelve un entero.

Por eso, su inicializador es el mismo que { 0, 0, 1, 1 } .

Como desea un double s, escriba el número para que el compilador los interprete como tales, como {2./12., 8./12., 14./12., 20./12. } {2./12., 8./12., 14./12., 20./12. } (el “.” hace que el número se vea como 2.0 y, por lo tanto, se trate como doble, ese es el tipo que desea almacenar)

Lo está haciendo porque está dividiendo enteros, y está haciendo una división de enteros, que arroja el resto. Quieres que haga una división de coma flotante. La forma más fácil de hacerlo es poner un punto decimal en tus expresiones:

doble timetomaturity [] = {2./12, 8./12, 14./12, 20./12};

More Interesting

Cómo saber si / cuándo puede aplicar la manipulación de bits para resolver un problema

¿Hay algún libro sobre estructuras de datos y algoritmos que se centre más en la perspectiva de gestión de memoria de los algoritmos?

¿Cómo verifico si un número binario es divisible por decir 'n'?

¿Cuál es el propósito del factor de carga en las tablas hash?

¿Cuál es la mejor manera de crear una estructura de datos basada en valores clave en C ++ que admita memoria compartida entre procesos usando C ++ 11?

¿Cuál de estos me dará la mejor oportunidad para usar los algoritmos y las estructuras de datos que se enseñan en el desarrollo web de la escuela o el desarrollo móvil?

Cómo escribir un programa C # para implementar un algoritmo de programación SRTF (el tiempo restante más corto primero), junto con la visualización del diagrama de Gantt

¿Cómo debo comenzar a aprender estructuras de datos y algoritmos? ¿Cuáles son algunos buenos libros, cursos en línea e idiomas preferidos?

¿Por qué hay diferentes tipos de clasificación en C?

Cómo encontrar la menor supercadena de 2 subcadenas

¿Qué algoritmo se usa para escanear?

¿Cuál es el enfoque para resolver la interpretación de datos en CAT? ¿Se usa lápiz y papel para dibujar estructuras o se mantiene al mínimo?

¿Puedes darme una idea para un juego simple que implemente el algoritmo (como el algoritmo A *) o la inteligencia artificial para NPC en el juego?

¿Cómo escribo un código C completo, incluidos todos los bucles y las condiciones de la línea de límite para la eliminación del nodo en el árbol de búsqueda binario?

En el algoritmo KNN, ¿por qué el pequeño valor de k conduce a una pequeña tasa de error?