[OSGeoJapan-discuss] GDALのPython版の精度

Taro Matsuzawa taro @ georepublic.co.jp
2017年 4月 23日 (日) 20:42:18 PDT


松澤です。

C++の方のコードは .15f で、
Pythonの方のコードは .15g なので、
そこらへんから調べて見るとよいのではないでしょうか?
(latitudeだと2桁の違いになる)

また、Pythonの表示をするための文字に変換する組み込み関数の
repr()では物によっては .15g となります。
ただ、以下の結果だと期待したものにはなりませんでした。

 >>> repr(139.718509733734379)
'139.71850973373438'
 >>> format(139.718509733734379, '.15g')
'139.718509733734'

あと、gdal-2.0.2のコードが手元にあったので検索してみましたが、
決定的な所はわからなかったです。

ちなみに、座標の比較を行う時は必ず誤差がある前提で比較をします。
よくこんなのを先に定義してやったりします。

```python
     EPSILON1 = 0.1
     EPSILON2 = 0.01
     EPSILON3 = 0.001
     EPSILON4 = 0.0001
     EPSILON5 = 0.00001
     # ...
     EPSILON16 = 0.0000000000000001
     EPSILON17 = 0.00000000000000001
```

On 2017/04/23 9:19, Miura Hiroshi wrote:
> 三浦です。
>
> 先月、基盤地図情報のコンバーターについて、取組をご紹介しました。
> 現在、テストケースで悩んでおり、皆さんの知見をお聞かせ頂きたいです。
>
> FGDConvプロジェクト
> https://github.com/miurahr/fgdconv
>
> テスト結果
> https://travis-ci.org/miurahr/fgdconv/builds/223815639
>
> こちらの結果で、生成されるべきデータの正解を、GDALの
> C++版のコマンドで生成しました。
> ところが、PythonのGDALで生成したものと、値が異なるというのです。
>
> 結果3132行目を細かく見ますと、
> 実際:139.718509733734
> 期待:139.718509733734379
> のように、桁が3桁も違っています。値はあっているようです。
>
> なぜ、こんなに桁の精度が違うのでしょう?
>
> 該当するコードは、この辺ですが、値をPython側で明示的に処理しているわけで
> はないので、不思議に思っています。
> https://github.com/miurahr/fgdconv/blob/master/fgdconv/ogr2ogr.py#L82
>
> 三浦
>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>


-- 
Georepublic Japan Ltd.
c/o CommunityLink
5-3-1 Kumoidori, Chuo Ward
Kobe 651-0096

Taro Matsuzawa
Senior Developer

eMail: taro @ georepublic.co.jp
Web: https://georepublic.info

Tel: +81 (03) 6868 5418
Fax: +81 (03) 3374 0291


OSGeoJapan-discuss メーリングリストの案内