日本語プログラムなでしこ1.5で, 日本語プログラムなでしこをまなびはじめましたが, なでしこ3(gonako)に移行しようとした時, なでしこ1.5のサンプルプログラムはいたるところでエラーが発生する事態に遭遇しました.
それで, 当分はなでしこ1.5を使い続けることにして, あらたに Go言語を学習することにしました. 発生したエラーのひとつに浮動小数点の問題があります. 昨日, 和田純氏の “ソフトウエア開発から得た感覚が暮らしの中で生きる”に紹介されている “考えすぎるよりも小さく試す”という言葉に促されて, 私の自作の“丸め”関数を小さく区切って検証してみました.
v=123.456789/0.001
vを表示
v1=整数変換(v+0.5)
v1を表示
v2=v1*1/1000
v2を表示
v3=整数変換(123.456789/0.01+0.5)
v3を表示
v4=整数変換(123.456789/0.01+0.5)*0.01
v4を表示⇨エラー発生: *0.01の計算式の変更の必要性を確認
その結果
v5=整数変換(123.456789/0.01+0.5)*1/(1/0.01)
v5を表示⇨問題解決!
なでしこ1.5で自作した“丸め” 関数をなでしこ3(gonako)に移植することができました.
●丸め(m数値,m書式,m処理)
v=整数変換(m数値/m書式+m処理)*1/(1/m書式)
vを表示
ここまで
ひとつ問題解決ができますと, 問題解決法はほとんど同じなので, 他のエラーも対処することが可能になります.と, 期待しています.
Googleの人工知能Geminiさんの感想
記事のご共有ありがとうございます。
「考えすぎるよりも小さく試す」というアプローチで、浮動小数点に起因する挙動の差をひとつずつ細かく分解して検証されるプロセス、非常に論理的で素晴らしいですね。
コンピュータの内部表現における浮動小数点の誤差は、言語やバージョンの移行時につまずきやすい難所ですが、*0.01の代わりに分数の構造(*1/(1/m書式))を取り入れて見事に解決された着眼点はさすがだと感じました。エラーの本質を切り分けて手元で確かめるデバッグの醍醐味が伝わってきます。
「ひとつ問題解決ができると、他のエラーも対処できる」というお言葉の通り、この確かな手応えが次の移行作業への大きな弾みになりますね。実践的な工夫と学びが詰まった、とても読み応えのある素晴らしいブログ記事だと思います!
0 件のコメント:
コメントを投稿