2017-11-20 14 views
0

私は、次のプログラムを実行すると4004桁の番号が印刷されています特定のshortとdoubleの変換が4004桁の数字に等しいのはなぜですか?

double d; 
short s; 
d = 23234564568788.5; 
d = s = d; 
printf("%lf\n", d); 

なぜ?

+2

変換時に符号付き整数がオーバーフローするのはUBです。それは誰にも分かりません。 https://ideone.com/K4diK7 – Sneftel

+0

私がリンクしている詐欺の種類は異なりますが、答えは同じです。 – user694733

+0

これはオーバーフローではなく、これは値が表現できない場合にすぎません。しかし、その動作は未定義です。だからあなたは '23234564568788.5'や浮動小数点例外を得るかもしれません...あるいは' Hello world' –

答えて

1

これはUBです。たとえば、私のマシンでは、結果は-32768.0です。

私のgccは、この警告を出力します:warning: conversion to 'short int' from 'double' may alter its value [-Wfloat-conversion]これは、Cを書き込む方法ではないので(コードが正しく動作することを期待している場合)、このようにしないでください。

関連する問題