40292


小数の扱いについてご教授ください。

以下のレコードのvalueはSQL Serverのfloat(倍精度小数)です。  
valueは他のシステムでもつ単精度小数の値がSQL ServerのテーブルにINSERTされます。  
diffは30分前の値との差分です。

本来diffはすべて30になるべきなのですが、一箇所だけ29があります。  
それがなぜなのかご教授いただきたいです。

説明不足かもしれませんが、どうかよろしくお願いします。

_Datetime,value,diff_  
2017/12/4 8:00 398278.59375 **30.09375**  
2017/12/4 8:30 398308.59375 **30.00000**  
**2017/12/4 9:00 398337.68750 29.09375**  
2017/12/4 9:30 398367.68750 **30.00000**  
2017/12/4 10:00 398397.81250 **30.12500**  
2017/12/4 10:30 398427.81250 **30.00000**  
2017/12/4 11:00 398457.81250 **30.00000**  
2017/12/4 11:30 398487.90625 **30.09375**  
2017/12/4 12:00 398517.90625 **30.00000**  
2017/12/4 12:30 398548.00000 **30.09375**  
2017/12/4 13:00 398578.00000 **30.00000**  
2017/12/4 13:30 398608.09375 **30.09375**  
2017/12/4 14:00 398638.09375 **30.00000**  
2017/12/4 14:30 398668.09375 **30.00000**  
2017/12/4 15:00 398698.18750 **30.09375**


CC BY-SA 3.0
2017-12-12T08:14:29.657
40212
2017-12-15T04:31:13.597
2017-12-12T09:18:57.627
19110
12388
question
浮動小数点数
単精度小数から倍精度小数に変換後の誤差


(SQLServerにデータを投入するという情報から、“他のシステム”がWindows系だと仮定して回答します。また、NTPで戻された＝OSの時刻を採用していることも前提になります。)

Windows Time サービスは下記の情報の通り、ご質問で **期待されているような時間の精度を持っていません**
。ソースにされている情報が、要件をそもそも満たしていないことになるので、“差分”の安定性について再検討する必要があると考えられます。

<https://support.microsoft.com/ja-jp/help/2722681>

> Windows Time サービスの精度 Windows Time サービスは、Kerberos 認証が正常に動作する範囲で NTP Client と
> NTP Server の時刻を同期することを主な目的とした、ゆるやかな時刻同期を提供する設計となっています。このため、Windows Time
> サービスにおいては、常に時刻差異が僅少である (1 秒単位の誤差など) 状態を保証することはできません。

<https://support.microsoft.com/ja-jp/help/939322/support-boundary-to-
configure-the-windows-time-service-for-high-accura>

> W32Time サービスは、1 ～ 2 秒の範囲で同期時刻を確実に維持できません。このような許容誤差は、W32Time
> サービスの設計仕様に含まれていません。


CC BY-SA 3.0
2017-12-15T03:50:46.130
40292
2017-12-15T04:31:13.597
2017-12-15T04:31:13.597
2238
2238
40212
answer