| 845 | |
| 846 | |
| 847 | static char* |
| 848 | icvDoubleToString( char* buf, double value ) |
| 849 | { |
| 850 | Cv64suf val; |
| 851 | unsigned ieee754_hi; |
| 852 | |
| 853 | val.f = value; |
| 854 | ieee754_hi = (unsigned)(val.u >> 32); |
| 855 | |
| 856 | if( (ieee754_hi & 0x7ff00000) != 0x7ff00000 ) |
| 857 | { |
| 858 | int ivalue = cvRound(value); |
| 859 | if( ivalue == value ) |
| 860 | sprintf( buf, "%d.", ivalue ); |
| 861 | else |
| 862 | { |
| 863 | static const char* fmt = "%.16e"; |
| 864 | char* ptr = buf; |
| 865 | sprintf( buf, fmt, value ); |
| 866 | if( *ptr == '+' || *ptr == '-' ) |
| 867 | ptr++; |
| 868 | for( ; cv_isdigit(*ptr); ptr++ ) |
| 869 | ; |
| 870 | if( *ptr == ',' ) |
| 871 | *ptr = '.'; |
| 872 | } |
| 873 | } |
| 874 | else |
| 875 | { |
| 876 | unsigned ieee754_lo = (unsigned)val.u; |
| 877 | if( (ieee754_hi & 0x7fffffff) + (ieee754_lo != 0) > 0x7ff00000 ) |
| 878 | strcpy( buf, ".Nan" ); |
| 879 | else |
| 880 | strcpy( buf, (int)ieee754_hi < 0 ? "-.Inf" : ".Inf" ); |
| 881 | } |
| 882 | |
| 883 | return buf; |
| 884 | } |
| 885 | |
| 886 | |
| 887 | static char* |
no test coverage detected