ゼロ除算

181 うそとまこと
2020/09/14(月) 16:33:01 ID: bmxKTOyqIr
プログラム内のx=a*b;とy=b*b;について説明したいと思います。
まずはa÷bの割り算にb/bを掛けます。現在ではb/b=1になりb=0の場合は解なしですが、乗算と除算の性質を利用し解をめないで分子と分に分け、(a×b)÷(b×b)の数式にします。

ゼロ除算の出結果が、答:0 余り:0(nan)となる理由は、a÷0の割り算が(a×0)÷(0×0)となり、乗算を先に計算した結果0÷0の数式になるからです。


【減算で除算/C言語サンプル ソースプログラム佐伯英子技術士事務所情報工学)】
https://saeki-ce.xsrv.jp/C_src/warizan02.htmlexit

引き算で割り算a÷b
整数(int%d)、負数対応
ゼロ除算で答:0 余り:0(nan)を出するプログラム
if(b==0)例外処理未使用
※上部省略
182 うそとまこと
2020/09/14(月) 16:34:58 ID: bmxKTOyqIr
x=a*b;
y=b*b;
if(a>=0&&b>=0){
for(c=0;x>=y&&y>0;c++)
{x-=y;}
printf("\n答:%d 余り:%d\n",c,x/b);
}
else if(a<=0&&b>=0){
for(c=0;x<=y*(-1)&&y>0;c--)
{x+=y;}
printf("\n答:%d 余り:%d\n",c,x/b);
}
else if(a>=0&&b<=0){
for(c=0;x<=y*(-1)&&y>0;c--)
{x+=y;}
printf("\n答:%d 余り:%d\n",c,x/b);
}
else if(a<=0&&b<=0){
for(c=0;x>=y&&y>0;c++)
{x-=y;}
printf("\n答:%d 余り:%d\n",c,x/b);
}
}
183 うそとまこと
2020/09/17(木) 19:36:06 ID: bmxKTOyqIr
elseを取り除きif文構成にした場合にいくつかの不備を発見。
>>171では、8÷2の割り算で余りがa=0になる場合、他のfor文でa=0つまり0÷2を出し、出結果が2つ表示。
0÷bでは全てのif文の条件式がa==0を含む為、出結果が複数表示されます。
>>181では、0÷bとa÷0で複数出されます。

対応策は、
else if文を使い続ける
②出する為のprintf("");をひとまとめにする
③return 0;を使用
if文の条件式を変更
(※for文を別々で出させる場合、不具合が生じます)
⑤d=a;を使用(※必須、①~③で対応してますが、負数の余りめる割り算で未使用時に不具合が生じます)

減算で除算のソースプログラムから逸脱しないようにしているので、対策①を使用してますが、出結果が気になる方は⑤を使用しつつ①と②を使用してください。
他に不備等があるようでしたらご一報ください。
184 うそとまこと
2020/09/18(金) 09:37:38 ID: bmxKTOyqIr
>>182プログラムに⑤'d=x;と②出する為のprintf("");をひとまとめにするを使用してプログラムを作成。

※上部省略
x=a*b;
y=b*b;
d=x;
if(a>=0&&b>=0){
for(c=0;d>=y&&y>0;c++)
{d-=y;}
}
if(a<=0&&b>=0){
for(c=0;d<=y*(-1)&&y>0;c--)
{d+=y;}
}
if(a>=0&&b<=0){
for(c=0;d<=y*(-1)&&y>0;c--)
{d+=y;}
}
if(a<=0&&b<=0){
for(c=0;d>=y&&y>0;c++)
{d-=y;}
}
printf("\n答:%d 余り:%d\n",c,d/b);
}
185 うそとまこと
2020/09/18(金) 09:40:17 ID: bmxKTOyqIr
>>184プログラムを符号の反転を利用し、for文を一めにしたプログラムを作成(短縮ver)

#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[128];
int a,b,c,d,x,y;
printf("\n***引き算で割り算***\n");
printf("\n減算だけでa÷bを計算します\n");
printf("\n a:");
gets(buf);a=atoi(buf);
printf("\n b:");
gets(buf);b=atoi(buf);

x=a*b;
y=b*b;
d=x;
if(x<0)
{d=d*(-1);}
for(c=0;d>=y&&y>0;c++)
{d-=y;}
if(x<0)
{c=c*(-1);
d=d*(-1);}
{printf("\n答:%d 余り:%d\n",c,d/b);}
}
186 うそとまこと
2020/10/09(金) 11:43:45 ID: bmxKTOyqIr
ゼロ除算の原因の一つである剰余演算について、定義のm=q×n+rを一次方程式を使い判別してみました。

(m余りr)÷n=q
(m-r)÷n=q
m=q×n+r(n≠0)
10÷3 = 3(整数)
10÷3 = 3余り1(剰余演算)
10 = 3×3+1(被除数の3を移項)

m÷n=q余りr
m÷n=q+r
10÷3 = 10/3(分数)
10÷3 = 9/3+1/3(※)
10÷3 = 3と1/3(帯分数)
187 うそとまこと
2020/10/29(木) 17:23:47 ID: mRTiGgRl1l
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[128];
int a,b,c,d;
printf("\n***引き算で割り算***\n");
printf("\n減算だけでa÷bを計算します\n");
printf("\n a:");
gets(buf);a=atoi(buf);//aの値を入
printf("\n b:");
gets(buf);b=atoi(buf);//bの値を入
printf("\n%d÷%d=%d/%d\n",a,b,a,b);

for(c=0;a>=b&&b>0;c++)
{a-=b;}//aからb減算
printf("\n帯分数:%dと%d/%d\n",c,a,b);
}


***引き算で割り算***
減算だけでa÷bを計算します
a:10
b:3
10÷3=10/3
帯分数:3と1/3
188 うそとまこと
2020/10/29(木) 17:46:48 ID: mRTiGgRl1l
ゼロ除算の原因となったプログラムは、
剰余演算のプログラムではなく、帯分数めるプログラムなのでは?
しかも、(&&b>0)が欠けてせいでエラー(オーバーフロー)し、ゼロ除算限と誤認された欠陥プログラム
189 うそとまこと
2020/10/30(金) 08:57:07 ID: mRTiGgRl1l
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[128];
int a,b,c,d,i;
printf("\n***引き算で割り算***\n");
printf("\n減算だけでa÷bを計算します\n");
printf("\n a:");
gets(buf);a=atoi(buf);//aの値を入
printf("\n b:");
gets(buf);b=atoi(buf);//bの値を入
printf("\n%d÷%d=%d/%d\n",a,b,a,b);

for(c=0;a>=b&&b>0;c++)
{a-=b;}//aからb減算
printf("\n帯分数:%dと%d/%d\n",c,a,b);

printf("\n小数:%d.",c);
for(i=0;i<6;i++){ // 小数点第7以下切り捨て
a=a*10; // シフト移動の代わり
for(c=0;a>=b&&b>0;c++)
{a-=b;}
printf("%d",c);
}
}
190 うそとまこと
2020/10/30(金) 09:02:59 ID: mRTiGgRl1l
***引き算で割り算***
減算だけでa÷bを計算します
a:10
b:3
10÷3=10/3
帯分数:3と1/3
小数:3.333333

***引き算で割り算***
減算だけでa÷bを計算します
a:1
b:6
1÷6=1/6
帯分数:0と1/6
小数:0.166666

***引き算で割り算***
減算だけでa÷bを計算します
a:3
b:0
3÷0=3/0
帯分数:0と3/0
小数:0.000000
191 ななしのよっしん
2020/11/16(月) 03:22:22 ID: lzOabReQcQ
ID: mRTiGgRl1l さんへ
掲示板研究発表をする場所ではありません。今後は自分のユーザーページでやっていただけませんか。
192 うそとまこと
2020/11/21(土) 17:14:45 ID: mRTiGgRl1l
Sci-pursuit数学・分数・帯分数の計算方法と仮分数への書き直し方・仮分数を帯分数に直す方法参照】
https://sci-pursuit.com/index.html#gsc.tab=0exit

申し訳ありません。余り帯分数に関しては自分が考えたものではありませんし、ましてや研究発表をしたつもりもありません。
上記のサイトに記載してあったことをプログラムに当て嵌めただけです。もし何かしらの問題などがあるようなら削除依頼を出しますのでご一報ください。
193 ななしのよっしん
2021/02/04(木) 08:45:52 ID: EfIZZM03sm
りんごが10個あり、これを0人で分けようと思います。1人に何個行き渡り、何個余りますか?

これ「0」て「人」ていう定義すらできなんだろうな
正しく文章に直すととか「 」が正しいのかな?

りんごが10個あり、これを「   」で分けようと思います。1人に何個行き渡り、何個余りますか?
「 」で分けるてなんだよ?てなるわなわw
?で分けるて消えるてことか?とも言える
194 ななしのよっしん
2021/03/27(土) 02:08:34 ID: SctYYbNkH/
wikipediaより詳しく書かれてて
195 ななしのよっしん
2021/05/02(日) 12:12:28 ID: ZiyasQz1wN
ふえぇ……ここ頭いい人しかいないよぉ……
196 ななしのよっしん
2021/08/03(火) 11:03:31 ID: RXGod7EreX
A(A≠0)に対して
A/0=Rと置くと
A=0R
2A=2・0R(もしくはA+A=0R+0R⇔2A=(0+0)R)
2A=0R
A=2Aで矛盾
これでFAだと思うんだが、いかんのか?