¿Es posible leer valores infinitos o NaN utilizando flujos de entrada?

Tengo una entrada para ser leída por un flujo de archivos de entrada (por ejemplo):

-365.269511 -0.356123 -Inf 0.000000

Cuando yo usostd::ifstream mystream; leer del archivo a algunos

double d1 = -1, d2 = -1, d3 = -1, d4 = -1;

(asumirmystream ya ha sido abierto y el archivo es válido),

mystream >> d1 >> d2 >> d3 >> d4;

mystream está en el estado de falla. Yo esperaría

std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;

para dar salida

-365.269511 -0.356123 -1 -1. Me gustaría que saliera-365.269511 -0.356123 -Inf 0 en lugar.

Este conjunto de datos se generó utilizando flujos de C ++. ¿Por qué no puedo hacer el proceso inverso (leer en mi salida)? ¿Cómo puedo obtener la funcionalidad que busco?

Desde MooingDuck:

#include <iostream>
#include <limits>

using namespace std;

int main()
{
  double myd = std::numeric_limits<double>::infinity();
  cout << myd << '\n';
  cin >> myd;
  cout << cin.good() << ":" << myd << endl;
  return 0;
}

Entrada:inf

Salida:

inf
0:inf

Ver también:http://ideone.com/jVvei

También relacionado con este problema esNaN Análisis, aunque no doy ejemplos para ello.

Agregué a la respuesta aceptada una solución completa sobre ideone. También incluye la combinación de "Inf" y "nan", algunas posibles variaciones de las palabras clave que pueden provenir de otros programas, como MatLab.

Respuestas a la pregunta(5)

Su respuesta a la pregunta