MainPage 〜きまぐれ ぷろぐらま語録〜
 

2024年4月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24
25
26 27
28 29 30        

最近の記事
Blog移転

エアポート2010を見た

花椒油

Steve Jobs,1955-2011

鉄球に無数のとげが付いた武器

M55→M42(T)が欲しい

健康診断done

回転寿司のルール

相模湖リゾート・プレジャー・フ ..

過去ログ 【表示/最小化】
2011年10月
2011年 9月
2011年 8月
2011年 7月
2011年 6月
2011年 5月
2011年 4月
2011年 3月
2011年 2月
2011年 1月
2010年12月
2010年11月
2010年10月
2010年 9月
2010年 8月
2010年 7月
2010年 6月
2010年 5月
2010年 4月
2010年 3月
2010年 2月
2010年 1月
2009年12月
2009年11月
2009年10月
2009年 9月
2009年 8月
2009年 7月
2009年 6月
2009年 5月
2009年 4月
2009年 3月
2009年 2月
2009年 1月
2008年12月
2008年11月
2008年10月
2008年 9月
2008年 6月
2008年 5月
2008年 4月
2008年 3月
2008年 2月
2008年 1月
2007年12月
2007年11月
2007年10月
2007年 9月
2007年 8月
2007年 7月
2007年 6月
2007年 5月
2007年 4月
2007年 3月
2007年 2月
2007年 1月
2006年12月
2006年11月
2006年10月
2006年 9月
2006年 8月
2006年 7月
2006年 6月
2006年 5月

広告欄

 

Blogを移転させました。
新Blogは次のURLです。
https://kerokero.org/wp/




PHPの32bit版と64bit版
よく、プログラムなどで、intとか、long intとか、書いたり、
仕様書に整数型とか書いたりされているけれど、
たまに問題になるのが、その精度。

先日、PHPでプログラムを書いていたら見事にはまったorz

あるシステムで問題なく動作していたプログラムが、
別のシステムだと、エラーになる。

まぁ、エラーになった場所をprintデバッグしたら一発で原因は特定できたんだけど
原因がまさにデータの精度の問題。

元のシステムは32bit版のPHPで移動先のシステムが64bit版のPHPだった。

そして、PHPには数値の精度の区別はなく、
整数は、あくまでも、整数であり、
その精度は、PHPのコンパイル環境に依存している。

そのため、バイナリファイルで FF FF FF FFのデータを読み込んだら、
32bit版では-1、64bit版では4294967295と解釈されていたのが原因だった。


WindowsのC++開発では、Windows.hかどこかで
typedef BYTE unsigned __int8
typedef WORD unsigned __int16
typedef DWORD unsigned __int32
なんて定義されているので、
8bit符号無し整数、16bit符号無し整数、32bit符号無し整数を明確に区別してコードが書ける。

MMXなどのコードを書くときには
typedef QWORD unsigned __int64なんて自分でやってもいい。

スクリプト言語は、こういう精度について細かく考えることが少ないけど、
まれに、精度についてシビアに気にしなければならない事例があるから、
気をつけねば。
01:10, Thursday, Feb 24, 2011 ¦ 固定リンク ¦ 携帯


△ページのトップへ
 

最新のつぶやき

サイト内検索
カスタム検索

旅行関係の記事等
九州・広島旅行記 2009(かみちゅ!)
大阪出張(KANON)
大阪出張(ハルヒ)
三宅島旅行記'05
三宅島旅行記'08
三宅島旅行記'10
伊豆半島小旅行

最近のコメント

最近のトラックバック

IPv4枯渇時計

携帯で読む
   URLを携帯に送る





[Valid RSS]

Powered by CGI RESCUE